0

我正在使用几个磁盘/分区(C:、D:、E:、F: 等)的 NTFS MasterFileTable / USN 日志,并且我想为每个文件/目录使用唯一的 ID。

当我阅读USN_RECORD(也称为 PUSN_RECORD)时,有这个 int64:

DWORDLONG     FileReferenceNumber;

这是一个唯一的文件/目录标识符,至少在当前分区中是唯一的。

但可能会发生碰撞:

  • C 中的文件:可能有 FileReferenceNumber 1932847
  • D: 中的另一个文件也可能有 FileReferenceNumber 1932847!

我想避免不得不使用这样一个大的东西int128(这将是FileReferenceNumber驱动器号 C:、D:、E:、...、Z: 的 64 位 + 5 位)。

我还想避免使用一对(char DriveLetter, DWORDLONG FileReferenceNumber)来识别计算机中的文件。

如何使用 64 位 int 编码FileReferenceNumber+ 盘符?

是否有可能因为FileReferenceNumber有一些空闲的未使用位?

如果不是,您将如何处理?

4

1 回答 1

1

您必须使用一对 FileReferenceNumber/FileID 和“volume something”。您可以在文件夹中安装卷,因此您不能真正使用驱动器号。

理想情况下,“volume something”是卷 GUID 路径,但如果大小很重要,您可以使用卷序列号。注意:并非所有卷都有 GUID。

对于 NTFS,您可以从中获取GetFileInformationByHandle并构建 32 位 + 64 位对。对于 ReFS,您需要GetFileInformationByHandleEx并构建一个 64 位 + 128 位对。

于 2017-07-11T14:21:39.013 回答