如何读取目录和/或文件的128位NTFS FILE_ID?

csh*_*net 6 c# c++ filesystems ntfs

因此NTFS使用128位Guid来识别文件和目录,您可以轻松地查看此信息:

C:\Temp>C:\Windows\System32\fsutil.exe objectid query .
Object ID :        ab3ffba83c67df118130e0cb4e9d4076
BirthVolume ID :   ca38ec6abfe0ca4baa9b54a543fdd84f
BirthObjectId ID : ab3ffba83c67df118130e0cb4e9d4076
Domain ID :        00000000000000000000000000000000

所以这很明显,但是如何以编程方式检索这些信息呢?查看OpenFileById(...)的WinApi,您应该能够获得此信息.可以预期这将在" Win32 FileID API库 "中完成,但那里的方法(GetFileInformationByHandleEx)返回FILE_ID_BOTH_DIR_INFO结构.这个结构定义了一个FileId; 但是,它是一个LARGE_INTEGER(64位)而不是完整的128位标识符.

我猜可以使用WMI,这是我应该转向的地方吗?

cas*_*nca 6

我进行了一些搜索,找到了DeviceIoControl你的问题的答案:FSCTL_GET_OBJECT_ID返回与输出完全相同的ID fsutil.

无论如何,BY_HANDLE_FILE_INFORMATION的文档说64位文件ID已经唯一地标识给定卷上的文件.根据维基百科,NTFS最多只支持2 ^ 32个文件,因此128位ID似乎是不必要的.

  • 但请注意,Windows Server 2012 中引入的 ReFS 文件系统使用 128 位文件标识符,并且您在此处获得的对象 ID 不再保证在此类卷上是唯一的! (2认同)