вопрос довольно обширен. Нужно написать программу по востановлению удаленных данных в файловой системе NTFS. Возникли следующие вопросы. Каким образом получить доступ в $MFT,что такое RAW режим и каким образом можно определить,что файл был удален?(по каким аттрибутам файла,ну или вообще каким способом). за ранее спасибо. п.с. может раздел не совсем подходит,но я себя приравниваю к новичкам,поэтому вопрос тут и находится.
Jawello Я не пойму, если ты спрашиваешь что такое RAW, а потом еще и спрашиваешь то видимо ты совсем не предстовляешь как устроенна в теории файловая систем (я сам более мение только с фатами знакомился когдато) то о каком востановлении файлов может быть речь? Читай набирайся опыта, в гугл короче. Сильно размазанный вопрос, и бестолковый по смыслу. А тему имхо удалить надо, и вообще такие темы удалять...
$MFT - это файл. А раз файл, то получить доступ можно через CreateFile как к любому файлу. У удаленного файла значение поля Flags в MFT record равно нулю.
Partner Flags - это 5ть полей. 1 - используеться ли файловая запись. 2 - используеться ли файловая запись и свзяана ли она с файлом. 3 - используеться ли файловая запись и связана ли она с дирикторией. а вот 4,5 это вопрос.по ним информации я не нашел. Если знаете не могли бы ответить? и попутно, где можно найти наиболее полную документацию по NTFS?книги,сайты и т.д.?желательно конечно на русском. Но при желании перевести можно все.
Я знаю следующие значения поля Flags (используются два младших бита) 0 - запись не используется (удаленный файл) 1 - файл 2 - удаленная директория. 3 - директория других значений не встречал, и если они есть их назначение мне не известно. Полной документаци по NTFS не существует. Одна из лучших книг по NTFS File System Forensic Analysis автор Brian Carrier http://www.ntfs.com/ http://data.linux-ntfs.org/ntfsdoc.pdf
Partner спасибо. я хотел уточнить по поводу значения 2 и 3. я нашел интересную ссылку по NTFS http://www.samag.ru/cgi-bin/go.pl?q=articles;n=11.2004;a=13 и там есть таблица,описывающая файловую запись. в ней значение 2 другое,а три вообще не описано.Стоит ли доверять этим данным? и еще. есть ли способ узнать удален ли файл в корзину анализируя запись $MFT?или в $MFT запись изменяется аналогичным образом, как и удаление мимо корзины? еще раз спасибо.
Там неправильно. Второй бит, а не чило 2 означает директорию. Вместе с первым битом (запись используетя) получаем 3. Нет, удаление в корзину это просто перемещение в специальную папку.
Partner спасибо,понял. ну если файл перемещается в специальную папку(которая всегда является постоянной), а атрибут $FILE_NAME содержит ссылку на материнский каталог, то я думаю что можно все таки определить?или я что то путаю и не допонимаю? у меня еще возник вопрос. в каком порядке происходит запись файловых записей в $MFT? в том порядке в каком создаются файлы/каталоги?
Родительской папки недостаточно, потому, что в корзине может быть целая ветка папок. Если же построить полный путь файла, то да, можно определить, что мы в корзине. Но $MFT здесь как бы не при чем. Не обязательно все файлы идут подряд. Зависит от наличия свободных записей. Но в принципе, стратегия заполнения MFT мне неизвестна. Для ускорения доступа каждая директория имеет индекс по всем, входящим в нее, файлах.
Partner Огромное спасибо) а есть ли способ узнать точную версию NTFS?и на сколько это необходимо, т.е. на слольно сильно различаются в них струтура основных метафайлов? на сколкьо мне известно в XP используеться весрия 3.1,а в Vista?способ определения версии NTFS до 3ий достаточно простой: попытаться создать мета файл $Extend в корневом каталоге,если получилось - версия 3.0 и выше(данный способ нашел в книге Криса Касперского).Но на моей машине стоит XP,и при попытке создания все равно выдает ошибку что такой файл уже существует.
http://www.windowsnetworking.com/kbase/WindowsTips/WindowsXP/AdminTips/TroubleShooting/WhichversionofNTFSamIrunning.html Это смотря что ты собираешься делать. ИМХО, для восстановления файлов версия NTFS особого значения не имеет.
Partner ну общий смысл понял.на днях точно переведу и разбирусь.как всегда спасибо. а как узнать размер 1ого сектора файловой записи?или он всегда постоянен и равен 1FEh?
Partner т.е. если считать что обычно размер записи 1024 байта(он же именно такой?),то максимум 2а сектора?
Размер MFT закодирован в каком-то поле (не помню) в бут-секторе. Говорят, может быть до 4096 байт, хотя я на практике не встречал размера отличного от 1024 байта.
n0name Чтобы найти $Boot нужно сначала найти MFT. На самом деле в $Boot располагается копия бут-сектора.