Каждый атрибут имеет свой собственный идентификатор (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. Основные типы атрибутов
Значение |
ОС |
Условное обозначение |
Описание |
010h |
Любая |
$STANDARD_INFORMATION |
Стандартная информация о файле (время, права доступа) |
020h |
Любая |
$ATTRIBUTE_LIST |
Список атрибутов |
030h |
Любая |
$FILE_NAME |
Полное имя файла |
040h |
Windows NT |
$VOLUME_VERSION |
Версия тома |
040h |
Windows 2000 |
$OBJECT_ID |
Глобально уникальный идентификатор (GUID) и прочие ID |
050h |
Любая |
$SECURITY_DESCRIPTOR |
Дескриптор безопасности и списки прав доступа (ACL) |
060h |
Любая |
$VOLUME_NAME |
Имя тома |
070h |
Любая |
$VOLUME_INFORMATION |
Информация о томе |
080h |
Любая |
$DATA |
Основные данные файла |
090h |
Любая |
$INDEX_ROOT |
Корень индексов |
0A0h |
Любая |
$INDEX_ALLOCATION |
Ветви (sub-nodes) индекса |
0B0h |
Любая |
$BITMAP |
Карта свободного пространства |
0C0h |
Windows NT |
$SYMBOLIC_LINK |
Символическая ссылка |
0C0h |
Windows 2000 |
$REPARSE_POINT |
Для сторонних производителей |
0D0h |
Любая |
$EA_INFORMATION |
Расширенные атрибуты для HPFS |
0E0h |
Любая |
$EA |
Расширенные атрибуты для HPFS |
0F0h |
Windows NT |
$PROPERTY_SET |
Устарело и ныне не используется |
100h |
Windows 2000 |
$LOGGED_UTILITY_STREAM |
Используется шифрующей файловой системой (EFS) |
$STANDARD_INFORMATION
Атрибут стандартной информации описывает время создания/изменения/последнего доступа к файлу и права доступа, а также некоторую другую вспомогательную информацию (например, квоты). Структура атрибута стандартной информации кратко описана в табл. 6.7.
Читать дальше
Конец ознакомительного отрывка
Купить книгу