Восстановление данных. Практическое руководство
Размер заголовка также варьируется от одной операционной системы к другой, и в явном виде нигде не хранится. Вместо этого в заголовке присутствует указатель на первый атрибут, содержащий его смещение в байтах относительно начала файловой записи и расположенный по смещению
байт от начала сектора. Смещения последующих атрибутов (если они есть) определяются путем сложения размеров всех предыдущих атрибутов (размер каждого из атрибутов содержится в его заголовке) со смещением первого атрибута. За концом последнего атрибута находится маркер конца — значение14h.FFFFFFFFhДлина файловой записи хранится в двух полях. Тридцатидвухразрядное поле реального размера (real size), находящееся по смещению
байт от начала сектора, содержит совокупный размер заголовка, всех его атрибутов и маркера конца, округленный по 8-байтной границе. Тридцатидвухразрядное поле выделенного размера (allocated size), находящееся по смещению18hбайт от начала сектора, содержит действительный размер файловой записи в байтах, округленный по размеру сектора. Документация Linux-NTFS Project (версия 0.4) утверждает, что выделенный размер должен быть кратен размеру кластера, но на практике это не так. Например, на моей машине длина поля выделенного размера равна четверти кластера.1Ch16-разрядное поле флагов, находящееся по смещению
байт от начала сектора, в подавляющем большинстве случаев принимает одно из следующих трех значений:16h— данная файловая запись не используется или ассоциированный с ней файл или каталог удален,00h— файловая запись используется и описывает файл,01h— файловая запись используется и описывает каталог.02h64-разрядное поле, находящееся по смещению
байт от начала сектора, содержит индекс базовой файловой записи. Для первой файловой записи это поле всегда равно нулю, а для всех последующих, расширенных записей — индексу первой файловой записи. Расширенные файловые записи могут находиться в любых областях MFT, не обязательно расположенных рядом с основной записью. Следовательно, необходим какой-то механизм, обеспечивающий быстрый поиск расширенных файловых записей, принадлежащих данному файлу (просматривать всю MFT было бы слишком нерационально). Этот механизм существует, и основан он на ведении списков атрибутов (20h). Список атрибутов представляет собой специальный атрибут, добавляемый к первой файловой записи и содержащий индексы расширенных записей. Формат списка атрибутов будет подробно описан далее в этой главе.$ATTRIBUTE_LISTОсновные поля заголовка файловой записи описаны в табл. 6.3. Остальные поля заголовка файловой записи не столь важны, и поэтому здесь они не рассматриваются. При необходимости обращайтесь к документации "Linux-NTFS Project".
Таблица 6.3. Структура заголовка файловой записи (FILE Record)
Смещение Размер (байт) ОС Описание 00h4 Любая Сигнатура FILE04h2 Любая Смещение номера последовательности обновления (update sequence number) 06h2 Любая Размер (в словах) номера последовательности обновления и массива обновления (Update Sequence Number & Array), условно S08h8 Любая Номер последовательности файла транзакций ( Sequence Number или LSN)$LogFile10h2 Любая Номер последовательности (sequence number) 12h2 Любая Счетчик жестких ссылок (hard link) 14h2 Любая Смещение первого атрибута 16h2 Любая Флаги Значение Описание 0x00Файловая запись не используется 0x01Файловая запись используется и описывает файл 0x02Файловая запись используется и описывает каталог 0x04За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает 0x08За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает 18h4 Любая Реальный размер (real size) файловой записи 1Ch4 Любая Выделенный размер (allocated size) файловой записи 20h8 Любая Ссылка (file reference) на базовую файловую запись (base FILE record) или ноль, если данная файловая запись является базовой 28h2 Любая Идентификатор следующего атрибута (next attribute ID) 2Ah2 Windows XP Используется для выравнивания 2Ch4 Windows XP Индекс данной файловой записи (number of this MFT record) 2 Любая Номер последовательности обновления (update sequence number) 2 -2SЛюбая Массив последовательности обновления (update sequence array)