代码之家  ›  专栏  ›  技术社区  ›  csharptest.net

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

  •  5
  • csharptest.net  · 技术社区  · 14 年前

    因此,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 Library “,但是这里的方法( GetFileInformationByHandleEx 返回一个 FILE_ID_BOTH_DIR_INFO 结构。这个结构定义了一个文件ID;但是,它是一个大整数(64位),而不是完整的128位标识符。

    我猜有人会用WMI来做这个,我应该在那里转弯吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   casablanca    14 年前

    我找了点东西 DeviceIoControl 你的问题的答案是: FSCTL_GET_OBJECT_ID 返回的ID与输出中的ID完全相同 fsutil .

    无论如何,文件 BY_HANDLE_FILE_INFORMATION 假设64位文件ID已经唯一地标识了给定卷上的文件。根据 Wikipedia ,ntfs最多只支持2^32个文件,因此128位ID似乎非常不必要。

        2
  •  1
  •   Dominik Weber    14 年前

    另外,请不要让每个文件都有一个guid。th guid mechanisim主要用于.lnk文件,以便在移动traget时保持关联。只有$volume和链接文件的目标有这些guid。此外,您可以手动设置它们。

    它们的优点是,guid不应在卷之间发生冲突,而文件ID会发生冲突。 文件_id实际上是48位mft_记录编号和16位mft_序列号