Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取目录和/或文件的128位NTFS文件\u ID?_C#_C++_Filesystems_Ntfs - Fatal编程技术网

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

C# 如何读取目录和/或文件的128位NTFS文件\u ID?,c#,c++,filesystems,ntfs,C#,C++,Filesystems,Ntfs,因此NTFS使用128位Guid来标识文件和目录,您可以非常轻松地查看这些信息: C:\Temp>C:\Windows\System32\fsutil.exe objectid query . Object ID : ab3ffba83c67df118130e0cb4e9d4076 BirthVolume ID : ca38ec6abfe0ca4baa9b54a543fdd84f BirthObjectId ID : ab3ffba83c67df118130e0cb4e9d40

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

C:\Temp>C:\Windows\System32\fsutil.exe objectid query . Object ID : ab3ffba83c67df118130e0cb4e9d4076 BirthVolume ID : ca38ec6abfe0ca4baa9b54a543fdd84f BirthObjectId ID : ab3ffba83c67df118130e0cb4e9d4076 Domain ID : 00000000000000000000000000000000 C:\Temp>C:\Windows\System32\fsutil.exe objectid查询。 对象ID:ab3ffba83c67df118130e0cb4e9d4076 出生卷ID:ca38ec6abfe0ca4baa9b54a543fdd84f 出生对象ID:ab3ffba83c67df118130e0cb4e9d4076 域ID:00000000000000000000000000 这很明显,但是如何通过编程检索这些信息呢?查看OpenFileById(…)的WinApi,您应该能够获得此信息。人们希望这在“”中完成,但是那里的方法()返回一个结构。这个结构定义了一个FileId;但是,它是一个大整数(64位),而不是完整的128位标识符


我猜有人可以使用WMI来实现这一点,我应该转向哪里呢?

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


不管怎么说,文档都说64位文件ID已经唯一地标识了给定卷上的文件。根据,NTFS最多只支持2^32个文件,因此128位ID似乎没有必要。

还请注意,并非每个文件都有GUID。GUID机制主要用于.lnk文件,以便在移动traget时保持关联。只有$Volume和链接文件的目标具有这些guid。此外,您可以手动设置它们

它们的优点是GUID不应该在卷之间冲突,而文件ID应该冲突。
文件ID实际上是48位MFT_记录编号和16位MFT_序列ID

完美!(不敢相信我没有发现)Ack-同意128位id是多余的…但请注意,Windows Server 2012引入的ReFS文件系统使用128位文件标识符,并且您在此处获得的对象id在此类卷上不再保证是唯一的!是的,我发现困难的是,必须使用FSCTL_CREATE_或_GET_OBJECT_ID(需要SeBackup进程令牌)。64位的问题与MS创建它的原因相同。我需要跟踪文件的移动,即使是在卷或机器之间。