2015-08-10 3 views
0

Мне нужно прочитать файл MFT работающей Windows (XP или выше) и через него, чтобы достичь секторов HD, содержащих содержимое ($ DATA) определенного файла, который существует на машина.Чтение содержимого файла из MFT во время выполнения

Проблема заключается в том, что между временем считывания MFT до извлечения соответствующих секторов и их чтением структура файловой системы может изменяться, и местоположения могут быть неактуальными больше.

Есть ли способ «заморозить» систему в течение определенного времени? Возможно, гарантия того, что для этого файла не будет изменений? Заблокировать определенный файл, чтобы он не перемещался между секторами? (В том числе из-за оптимизаций и изменений в косвенном)

Конечно, я бы предпочел не копировать весь жесткий диск и работать статически, так как это медленная операция, которая в настоящее время не позволит нормальному использованию системы. Излишне говорить, что я не хочу использовать функции API для ОС или писать драйвер.

+0

Из вопроса я не понимаю, действительно ли вы хотите прочитать содержимое атрибута $ DATA или фактические данные файла - это не одно и то же, из-за отложенных операций записи и нескольких других обстоятельств. –

+0

Мне действительно нужны реальные данные, как это показано при вызове ReadFile. – Reflection

+0

В другом странном направлении - вы можете установить переднюю загрузку, такую ​​как WinPE, и выполнять свою работу оттуда. В такой среде вы являетесь единственным пользовательским процессом, и вы можете иметь свой путь со всеми файлами без помех. Я работаю над продуктом «ремонт и визуализация», который делает это. Мессинг с BCD - это немного танца, но фиксированное стабильное состояние файла настолько изумительно. Пользовательский процесс в winPE работает как admin, кстати. – Clay

ответ

0

Я просто открыл файл, запрашивая доступ для чтения/записи, с режимом совместного использования. Если вам удастся открыть файл, вам гарантировано, что данные не изменятся, пока вы не закроете дескриптор. См. https://msdn.microsoft.com/en-us/library/windows/desktop/hh449422%28v=vs.85%29.aspx

Если вы хотите достичь этого в файлах, которые уже открыты и заблокированы разными процессами, это совершенно другая история, и я считаю, что вам нужно написать собственный фильтр фильтра.

+0

Проблема в том, что мне не нужно влиять на системные журналы и не оставлять трассировку или вносить изменения в файловую систему – Reflection

+0

Если вы не выполните операцию записи в файл, вы не будете изменять файл (его содержимое), но вы изменит время доступа к файлу. Я не уверен, какие журналы вы имеете в виду (аудит, журнал) или как вы определяете трассировку? Тем не менее, я считаю, что это единственный вариант высокого уровня. –

0

Если местоположение файла в системе меняется, оно будет соответствующим образом отражено в MFT. Поэтому вместо того, чтобы остановить любую активность для файла, вы можете просто сравнить информацию MFT до и после прочтения файла. Если вы не дефрагментируете или не удаляете содержимое файла, структура хранилища файлов не изменится. Дополнения к файлам не влияют на согласованность данных, которые вы читаете. Поэтому, если это ваш сценарий, вы можете просто продолжить этот метод.

Смежные вопросы