如何读取目录和/或文件的128位NTFSFILE_ID?SoNTFSuses128bitGuidtoidentifyfilesanddirectories,youcaneasilycheckthisinfo:C:Temp>C:WindowsSystem32fsutil.exeobjectidquery.对象ID:ab3ffba83c67df118130e0cb4e9d4076BirthVolumeID:ca38ec6abfe0ca4baa9b54a543fdd84fBirthObjectIdID:ab3ffba83c67df118130e0cb4e9d4076域ID:00000000000000000000000000000000所以这很明显,但是如何以编程方式检查这些信息呢?看看OpenFileById(...)的WinApi,你应该能够得到这个。人们会期望这是在“Win32FileIDAPI库”中完成的,但是那里的方法(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已经唯一标识给定卷上的文件。根据维基百科,NTFS最多只支持2^32个文件,因此128位ID似乎没有必要。另请注意,并非每个文件都有GUID。GUID机制主要用于.lnk文件在移动目标时保持关联。只有$Volume和链接文件的目标具有这些GUID。此外,您可以手动设置它们。它们的优点是GUID不应在卷之间发生冲突,而文件ID也可以。FILE_ID其实就是48位的MFT_RECORD_NUMBER和16位的MFT_SEQUENCE_ID以上是C#学习教程:如何读取目录和/或文件的128位NTFSFILE_ID?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
