Я использую журнал NTFS MasterFileTable / USN несколько дисков / разделов (C :, D :, E :, F: и т. Д.), И я хотел бы использовать уникальный идентификатор для каждого файла / каталога.
Пока я читаю USN_RECORD (также называется PUSN_RECORD), есть этот int64:
DWORDLONG FileReferenceNumber;
это уникальный идентификатор файла / каталога, уникальный, по крайней мере, в текущем разделе.
Но могут быть столкновения:
Я хотел бы избежать использования такой большой вещи, как int128
(это будет 64 бита FileReferenceNumber
+ 5 бит для буквы диска C :, D :, E :, …, Z :).
Я также хотел бы избежать использования пары (char DriveLetter, DWORDLONG FileReferenceNumber)
идентифицировать файл на компьютере.
Как использовать 64-битный int для кода FileReferenceNumber
+ буква диска?
Это возможно, потому что FileReferenceNumber
есть несколько свободных неиспользованных битов?
Если нет, как бы вы справились с этим?
Вы должны использовать пару FileReferenceNumber / FileID и «том-то». Вы можете смонтировать том в папке так что вы не можете использовать букву диска.
В идеале «объем-то» является Путь GUID тома но вы можете использовать серийный номер тома, если размер важен. Примечание. Не все тома имеют GUID.
Для NTFS вы можете получить его от GetFileInformationByHandle
и построить 32-битную + 64-битную пару. Для ReFS вам нужно GetFileInformationByHandleEx
и построить 64-битную + 128-битную пару.
Других решений пока нет …