Member 4348204
В NTFS сам файл $MFT имеет запись для каждого файла. Этот идентификатор файла имеет 16 бит и 48-бит индексного файла $MFT. FileId => [seq << 48 | mft_index]. Вы можете читать записи $MFT с помощью
DeviceIoControl(hVolume, FSCTL_GET_NTFS_FILE_RECORD, ...)
приобретать
NTFS_FILE_RECORD_OUTPUT_BUFFER
и получить доступ к его
FileRecordBuffer
член, который содержит информацию NTFS для fileId в файле
FileReferenceNumber
параметр системы
NTFS_FILE_RECORD_OUTPUT_BUFFER
соответствие с
NTFS_FILE_RECORD_INPUT_BUFFER
если только имя файла не является недопустимым.
MFT довольно хорошо документирован во многих местах в интернете. Тем не менее, важно отметить, что файл-запись MFT содержит пары атрибутов ключ-значение. Среди вещей в этих атрибутах есть имена жестких ссылок, любая точка повторного анализа и любые потоки NTFS (например, dir), которые являются частью этого файла.
Другими словами, данный fileId может ссылаться на несколько "имен файлов", если на него указывает несколько жестких ссылок. Таким образом, каноническое имя-это первая жесткая ссылка, найденная в атрибутах ключ-значение записи $MFT, которая затем проходит назад/вверх по родительскому дереву каталогов, чтобы построить канонический путь к файлу.