有一个名为 的实用程序可以在 Microsoft Windows 命令行上运行fsutil
。它接受的命令之一是fsutil usn readjournal <volume pathname>
以及其他几个参数。是否有关于如何读取程序生成的数据的文档?我特别感兴趣的是如何解释和使用File ID
和Parent file ID
字段。由于File name
不包括完整路径,因此不清楚如何根据位置确定文件是否值得关注。
示例记录
Usn : 9149751384
File name : Preferences~RF101ac0ae.TMP
File name length : 52
Reason : 0x80000200: File delete | Close
Time stamp : 7/12/2018 11:04:30
File attributes : 0x00000020: Archive
File ID : 0000000000000000000500000000a67b
Parent file ID : 0000000000000000000500000003fa3c
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 128
答案1
该输出对应于USN_RECORD_V3
数据结构。关于 ID 行,NTFS 卷上的每个对象都有一个数字标识符。“文件 ID”行为您提供受该更新影响的文件的 ID;“父文件 ID”是包含该文件的目录的 ID。
要获取文件路径,您可以使用此实用程序的另一种模式:fsutil file queryFileNameById
。它采用卷路径和文件 ID(带0x
前缀),并返回完整路径。我说“一个”路径而不是“该”路径,因为 NTFS 允许硬链接,这会为同一文件提供不同的路径。在这种情况下返回哪个路径是任意的。不过,绝大多数文件只有一个链接/路径。
让我们举个例子。我有这个 USN 记录:
Usn : 46966427728
File name : settings.dat
File name length : 24
Reason : 0x80000001: Data overwrite | Close
Time stamp : 7/11/2018 21:50:57
File attributes : 0x00000020: Archive
File ID : 00000000000000000005000000170d13
Parent file ID : 0000000000000000001200000019ab0e
Source info : 0x00000000: *NONE*
Security ID : 0
Major version : 3
Minor version : 0
Record length : 104
让我们使用文件 ID 来查找文件的路径:
fsutil file queryFileNameById C:\ 0x00000000000000000005000000170d13
结果:
A random link name to this file is \\?\C:\Users\Ben\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\Settings\settings.dat
看起来这个文件是照片应用的某种配置存储。就您的 USN 记录而言,该文件现在可能已被删除,因此您必须使用父 ID 来查找它的位置。如果我通过文件的父 ID 进行查询...
fsutil file queryFileNameById C:\ 0x0000000000000000001200000019ab0e
...我只获得了文件夹的路径,而不是settings.dat
文件的路径:
A random link name to this file is \\?\C:\Users\Ben\AppData\Local\Packages\Microsoft.Windows.Photos_8wekyb3d8bbwe\Settings