Как получить уникальный идентификатор для всех файлов на всех дисках, используя WinApi / USN / MasterFileTable?

Я использую журнал NTFS MasterFileTable / USN несколько дисков / разделов (C :, D :, E :, F: и т. Д.), И я хотел бы использовать уникальный идентификатор для каждого файла / каталога.

Пока я читаю USN_RECORD (также называется PUSN_RECORD), есть этот int64:

DWORDLONG     FileReferenceNumber;

это уникальный идентификатор файла / каталога, уникальный, по крайней мере, в текущем разделе.

Но могут быть столкновения:

  • файл в C: может иметь FileReferenceNumber 1932847
  • другой файл в D: тоже может иметь FileReferenceNumber 1932847!

Я хотел бы избежать использования такой большой вещи, как int128 (это будет 64 бита FileReferenceNumber + 5 бит для буквы диска C :, D :, E :, …, Z :).

Я также хотел бы избежать использования пары (char DriveLetter, DWORDLONG FileReferenceNumber) идентифицировать файл на компьютере.

Как использовать 64-битный int для кода FileReferenceNumber + буква диска?

Это возможно, потому что FileReferenceNumber есть несколько свободных неиспользованных битов?

Если нет, как бы вы справились с этим?

-1

Решение

Вы должны использовать пару FileReferenceNumber / FileID и «том-то». Вы можете смонтировать том в папке так что вы не можете использовать букву диска.

В идеале «объем-то» является Путь GUID тома но вы можете использовать серийный номер тома, если размер важен. Примечание. Не все тома имеют GUID.

Для NTFS вы можете получить его от GetFileInformationByHandle и построить 32-битную + 64-битную пару. Для ReFS вам нужно GetFileInformationByHandleEx и построить 64-битную + 128-битную пару.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]