如何从NTFS索引号获取文件路径?

ske*_*ar7 5 c++ winapi

我有从调用GetFileInformationByHandle获得的dwVolumeSerialNumber,nFileIndexHigh,nFileIndexLow值.如何从这些值获取文件路径?

Ray*_*rns 4

由于硬链接,可能有多个路径映射到给定的 VolumeSerialNumber 和 FileIndex。要查找所有此类路径:

  1. 迭代卷以查找根目录与 dwVolumeSerialNumber 匹配的卷
  2. 递归枚举卷上的所有目录,跳过符号链接和重新分析点,以查找具有匹配 nFileIndexHigh 和 nFileIndexLow 的所有文件。

这可能非常耗时。如果您确实需要尽快执行此操作并且您的文件系统是 NTFS,则可以将整个 MFT 原始读取到缓冲区中并自行解析。这将一次性获取适合 MFT 条目的所有目录。其余目录可以通过操作系统读取,也可以通过原始读取来读取,具体取决于您想要执行的工作量。但无论从哪个角度来看,这都是一项艰巨的工作,而且甚至不适用于 FAT、FAT32 或任何其他文件系统。

更好的解决方案可能是如果可能的话坚持原来的路径。