代码之家  ›  专栏  ›  技术社区  ›  Basj

如何使用WinApi/USN/MasterFileTable为所有磁盘中的所有文件拥有唯一的ID?

  •  0
  • Basj  · 技术社区  · 7 年前

    几个磁盘/分区 (C:,D:,E:,F:,等等),我想为每个文件/目录使用一个唯一的ID。

    当我读报纸的时候 USN_RECORD

    DWORDLONG     FileReferenceNumber;
    

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

    但可能会发生碰撞:

    • C语言中的文件:可能有FileReferenceNumber 1932847

    int128 (这将是 FileReferenceNumber +5位表示驱动器号C:,D:,E:,…,Z:)。

    (char DriveLetter, DWORDLONG FileReferenceNumber)

    如何使用64位int进行编码

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Anders    7 年前

    您必须使用一对FileReferenceNumber/FileID和“volume something”。你可以 mount a volume in a folder

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

    对于NTFS,您可以从 GetFileInformationByHandle 并构建一个32位+64位对。对于您需要的裁判 GetFileInformationByHandleEx