Восстановление данных - страница 61
Два 64-разрядных поля, расположенные по смещениям >10h
и >18h
байт от начала атрибутного заголовка, задают первый (starting VCN) и последний (last VCN) номера виртуального кластера, принадлежащего телу нерезидентного атрибута. Виртуальные кластеры представляют собой логические номера кластеров, не зависящие от своего физического расположения на диске. В подавляющем большинстве случаев номер первого кластера тела нерезидентного атрибута равен нулю, а последний — количеству кластеров, занятых телом атрибута, уменьшенному на единицу. 16-разрядное поле, расположенное по смещению >20h
от начала атрибутного заголовка, содержит указатель на массив >Data Runs
, расположенный внутри этого заголовка и описывающий логический порядок размещения нерезидентного тела атрибута на диске.
Каждый атрибут имеет свой собственный идентификатор (attribute ID), уникальный для данной файловой записи и хранящийся в 16-разрядном поле, расположенном по смещению >0Eh
от начала атрибутного заголовка.
Если атрибут имеет имя (attribute Name), то 16-разрядное поле, расположенное по смещению >0Ah
байт от атрибутного заголовка, содержит указатель на него. Для безымянных атрибутов оно равно нулю (большинство атрибутов имен не имеют). Имя атрибута хранится в атрибутном заголовке в формате UNICODE, а его длина определяется 8-разрядным полем, расположенным по смещению >09h
байт от начала атрибутного заголовка.
Если тело атрибута сжато, зашифровано или разрежено, 16-разрядное поле флагов, расположенное по смещению >0Ch
байт от начала атрибутного заголовка, не равно нулю.
Основные поля резидентных и нерезидентных атрибутов кратко описаны в табл. 6.4 и 6.5. Остальные поля не играют существенной роли, и потому здесь они не рассматриваются.
Таблица 6.4. Структура резидентного атрибута
Смещение | Размер (байт) | Значение | Описание | |
---|---|---|---|---|
>00h | 4 | Тип атрибута (например, >0x10 , >0x60 , >0xB0 ) | ||
>04h | 4 | Длина атрибута, включая этот заголовок | ||
>08h | 1 | >00h | Флаг нерезидентности (non-resident flag) | |
>09h | 1 | >N | Длина имени атрибута (ноль, если атрибут безымянный) | |
>0Ah | 2 | >18h | Смещение имени (ноль, если атрибут безымянный) | |
>0Ch | 2 | >00h | Флаги | |
Значение | Описание | |||
>0001h | Сжатый атрибут (compressed) | |||
>4000h | Зашифрованный атрибут (encrypted) | |||
>8000h | Разреженный атрибут (sparse) | |||
>0Eh | 2 | Идентификатор атрибута (attribute ID) | ||
>10h | 4 | >L | Длина тела атрибута, без заголовка | |
>14h | 2 | >2N+18h | Смещение тела атрибута | |
>16h | 1 | Индексный флаг | ||
>17h | 1 | >00h | Используется для выравнивания | |
>18h | 2N | >UNICODE | Имя атрибута (если есть) | |
>2N+18h | L | Тело атрибута |
Таблица 6.5. Структура нерезидентного атрибута
Смещение | Размер (байт) | Значение | Описание | |
---|---|---|---|---|
>00h | 4 | Тип атрибута (например, >0x20 , >0x80 ) | ||
>04h | 4 | Длина атрибута, включая этот заголовок | ||
>08h | 1 | >01h | Флаг нерезидентности (non-resident flag) | |
>09h | 1 | >N | Длина имени атрибута (ноль, если атрибут безымянный) | |
>0Ah | 2 | >40h | Смещение имени (ноль, если атрибут безымянный) | |
>0Ch | 2 | Флаги | ||
Значение | Описание | |||
>0001h | Сжатый атрибут (compressed) | |||
>4000h | Зашифрованный атрибут (encrypted) | |||
>8000h | Разреженный атрибут (sparse) | |||
>0Eh | 2 | Идентификатор атрибута (attribute ID) | ||
>10h | 8 | Начальный виртуальный кластер (starting VCN) | ||
>18h | 8 | Конечный виртуальный кластер (last VCN) | ||
>20h | 2 | >2N+40h | Смещение списка отрезков (data runs) | |
>22h | 2 | Размер блока сжатия (compression unit size), округленный до 4 байт в большую сторону | ||
>24h | 4 | >00h | Используется для выравнивания | |
>28h | 8 | Выделенный размер (allocated size), округленный до размера кластера | ||
>30h | 8 | Реальный размер (real size) | ||
>38h | 8 | Инициализированный размер потока (initialized data size of the stream) | ||
>40h | 2N | >UNICODE | Имя атрибута (если есть) | |
>2N+40h | … | Список отрезков (data runs) |
Типы атрибутов
NTFS поддерживает большее количество предопределенных типов атрибутов, перечисленных в табл. 6.6. Тип атрибута определяет его назначение и формат представления тела. Полное описание всех атрибутов заняло бы не одну главу, а целую книгу, поэтому здесь приводятся лишь наиболее "ходовые" из них, а за информацией об остальных обращайтесь к документации Linux-NTFS Project.
Таблица 6.6. Основные типы атрибутов