Получить смещение файла на диске / номер кластера
Мне нужно получить любую информацию о том, где файл физически находится на диске NTFS. Абсолютное смещение, идентификатор кластера .. все. Мне нужно отсканировать диск дважды, один раз, чтобы получить выделенные файлы, и еще раз мне нужно открыть раздел непосредственно в режиме RAW и попытаться найти остальные данные (из удаленных файлов). Мне нужен способ понять, что обнаруженные мной данные совпадают с данными, которые я уже обрабатывал ранее в виде файла. Поскольку я сканирую диск в необработанном режиме, смещение данных, которые я нашел, может быть каким-то образом преобразовано в смещение файла (имеющего информацию о геометрии диска). Есть какой-либо способ сделать это? Другие решения также принимаются. Сейчас я играю с FSCTL_GET_NTFS_FILE_RECORD, но пока не могу заставить его работать, и я не уверен, что это поможет.
UPDATE
Я нашел следующую функцию http://msdn.microsoft.com/en-us/library/windows/desktop/aa364952(v=vs.85).aspx Он возвращает структуру, которая содержит переменные nFileIndexHigh и nFileIndexLow. Документация говорит
The identifier that is stored in the nFileIndexHigh and nFileIndexLow members is called the file ID. Support for file IDs is file system-specific. File IDs are not guaranteed to be unique over time, because file systems are free to reuse them. In some cases, the file ID for a file can change over time.
Я не очень понимаю, что это такое. Я не могу подключить его к физическому расположению файла. Можно ли позже извлечь этот идентификатор файла из MFT?
UPDATE
Нашел это:
This identifier and the volume serial number uniquely identify a file. This number can change when the system is restarted or when the file is opened.
Это не удовлетворяет моим требованиям, потому что я собираюсь открыть файл, и тот факт, что ID может измениться, не делает меня счастливым.
Есть идеи?