Касперски Крис
Шрифт:
Следом за сигнатурой идет 16-разрядный указатель, содержащий смещение последовательности обновления (update sequence). Под "указателем" здесь и до конца раздела подразумевается смещение от начала сектора, отсчитываемое от нуля и выраженное в байтах. В Windows NT и Windows 2000 это поле всегда равно
Размер заголовка также варьируется от одной операционной системы к другой, и в явном виде нигде не хранится. Вместо этого в заголовке присутствует указатель на первый атрибут, содержащий его смещение в байтах относительно начала файловой записи и расположенный по смещению
Длина файловой записи хранится в двух полях. Тридцатидвухразрядное поле реального размера (real size), находящееся по смещению
16-разрядное поле флагов, находящееся по смещению
64-разрядное поле, находящееся по смещению
Основные поля заголовка файловой записи описаны в табл. 6.3. Остальные поля заголовка файловой записи не столь важны, и поэтому здесь они не рассматриваются. При необходимости обращайтесь к документации "Linux-NTFS Project".
Таблица 6.3. Структура заголовка файловой записи (FILE Record)
Смещение | Размер (байт) | ОС | Описание |
---|---|---|---|
00h | 4 | Любая | Сигнатура FILE |
04h | 2 | Любая | Смещение номера последовательности обновления (update sequence number) |
06h | 2 | Любая | Размер (в словах) номера последовательности обновления и массива обновления (Update Sequence Number & Array), условно S |
08h | 8 | Любая | Номер последовательности файла транзакций ( $LogFile Sequence Number или LSN) |
10h | 2 | Любая | Номер последовательности (sequence number) |
12h | 2 | Любая | Счетчик жестких ссылок (hard link) |
14h | 2 | Любая | Смещение первого атрибута |
16h | 2 | Любая | Флаги |
Значение | Описание | ||
0x00 | Файловая запись не используется | ||
0x01 | Файловая запись используется и описывает файл | ||
0x02 | Файловая запись используется и описывает каталог | ||
0x04 | За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает | ||
0x08 | За справками обращайтесь к Биллу Гейтсу — вероятно, только он это знает | ||
18h | 4 | Любая | Реальный размер (real size) файловой записи |
1Ch | 4 | Любая | Выделенный размер (allocated size) файловой записи |
20h | 8 | Любая | Ссылка (file reference) на базовую файловую запись (base FILE record) или ноль, если данная файловая запись является базовой |
28h | 2 | Любая | Идентификатор следующего атрибута (next attribute ID) |
2Ah | 2 | Windows XP | Используется для выравнивания |
2Ch | 4 | Windows XP | Индекс данной файловой записи (number of this MFT record) |
2 | Любая | Номер последовательности обновления (update sequence number) | |
2 S – 2 | Любая | Массив последовательности обновления (update sequence array) |
Последовательность обновления
Будучи очень важными компонентами файловой системы,
В конец каждого из секторов, слагающих файловую запись (
Основное назначение последовательностей обновления — защита от "обрыва записи". Если в процессе записи сектора на диск исчезнет питающее напряжение, может случиться так, что часть файловой записи будет записана успешно, а другая часть — сохранит прежнее содержимое (файловая запись, как мы помним, обычно состоит из двух секторов). После восстановления питания драйвер файловой системы не может уверенно определить, была ли файловая запись записана целиком. Вот тут-то последовательности обновления и выручают! При каждой перезаписи сектора последовательность обновления увеличивается на единицу. Потому, если произошел обрыв записи, значение последовательности обновления, находящейся в заголовке файловой записи, не совпадет с последовательностью обновления, расположенной в конце сектора.