Перечисление NTFS MFT: поддержка FSCTL_ENUM_USN_DATA и USN_RECORD_V3

Я использую FSCTL_ENUM_USN_DATA для перечисления по NTFS MFT, чтобы я мог создать базу данных каталогов на основе номеров USN_RECORD FileReferenceNumbers. Я создаю эту базу данных, чтобы отслеживать изменения файлов на диске NTFS, используя журнал изменений NTN USN и читая USN_RECORD (используя FileReferenceNumber и ParentFileReferenceNumber, которые ссылаются на базу данных каталога). Смотрите здесь для получения информации о том, как это сделать.

Моя проблема связана с версиями USN Record. Если вы посмотрите, USN_RECORD_V2 поддерживает другой тип данных для FileReferenceNumbers (DWORDLONG), чем USN_RECORD_V3 (FILE_ID_128). Это было бы хорошо, если бы FSCTL_ENUM_USN_DATA поддерживал USN_RECORD_V3. Проблема в том, что USN_RECORD_V3 используется в Windows 10, а USN_RECORD_V2 - в Windows 7.

FSCTL_ENUM_USN_DATA принимает в качестве входного буфера MFT_ENUM_DATA_V1 или MFT_ENUM_DATA_V0. Я предполагал, что V1 поддерживает FILE_ID_128 FileReferenceNumbers, но это предположение оказалось неверным. Кажется, что нет никакой поддержки для USN_RECORD_V3 и связанного с ним типа данных FileReferenceNumber. Таким образом, отслеживание изменений на диске NTFS с помощью журнала изменений NTFS в версиях Windows, использующих USN_RECORD_V3 или более позднюю версию, представляет собой огромную проблему в настоящее время.

Я нашел временное решение! В Windows 10 при перечислении MFT FSCTL_READ_ENUM_DATA возвращал только USN_RECORD_V2, давая FileReferenceNumbers типа DWORDLONG. В свою очередь, я был вынужден сдвинуть биты этих DWORDLONG FileReferenceNumbers в 128-битный буфер, чтобы кэш каталога совпадал с USN_RECORD_V3, возвращенными из вызова FSCTL_READ_USN_JOURNAL.

Однако я не могу не чувствовать, что что-то упустил. У кого-нибудь есть какие-то другие решения этой проблемы или альтернативные подходы, которые можно использовать? Имейте в виду, мониторинг изменений, которые были внесены в диск, когда программа не работала, имеет первостепенное значение для моего проекта.

0 ответов

Другие вопросы по тегам