Csharp/C#教程:如何读取目录和/或文件的128位NTFS FILE_ID?分享


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

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

  C: Temp> C: Windows  System32  fsutil.exe objectid查询。 对象ID:ab3ffba83c67df118130e0cb4e9d4076  BirthVolume ID:ca38ec6abfe0ca4baa9b54a543fdd84f  BirthObjectId ID:ab3ffba83c67df118130e0cb4e9d4076 域ID:00000000000000000000000000000000 

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

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

一些搜索将我带到了DeviceIoControl ,你的问题就出现了答案: FSCTL_GET_OBJECT_ID返回与fsutil输出完全相同的ID。

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

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

它们的优点是GUID不应该在卷之间发生冲突,而文件ID也可以。 FILE_ID实际上是MFT_RECORD_NUMBER的48位和MFT_SEQUENCE_ID的16位

上述就是C#学习教程:如何读取目录和/或文件的128位NTFS FILE_ID?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1251023.html

(0)
上一篇 2022年11月8日
下一篇 2022年11月8日

精彩推荐