Windows - статьи

       

Распространенные атрибуты


Ниже даны характеристики основных атрибутов, которые используются в NTFS для описания файлов и каталогов. Обратите внимание, что это формат тел атрибутов соответствующих типов.

Атрибут $FILE_NAME.


Идентификатор 0x30.

Смещение

Тип

Описание



0x0 MFT_REF Ссылка на родительский каталог (в котором хранится файл).
0x8 ULARGE_INTEGER Время создания.
0x10 ULARGE_INTEGER Время последней модификации атрибута с данными.
0x18 ULARGE_INTEGER Время последней модификации данной записи.
0x20 ULARGE_INTEGER Время последнего доступа к записи.
0x28 ULARGE_INTEGER Размер выделенного дискового пространства для основного атрибута $DATA (кратно размеру кластера).
0x30 ULARGE_INTEGER Реальный размер основного атрибута $DATA.
0x38 ULONG Атрибуты файла.
0x3C ULONG Тип точки разбора.
0x40 UCHAR Длина имени файла в символах.
0x41 UCHAR Пространство имен (0 – POSIX, 1 - Win32, 2 - DOS).
0x42+ WCHAR Имя файла.

Атрибут $FILE_NAME всегда резидентен. Он служит для двух функций. Во-первых, хранит имя файла в записи MFT, причем атрибутов $FILE_NAME у файла может быть несколько (NT эмулирует различные подсистемы DOS и POSIX, в том числе и на уровне файлов). Для MS-DOS атрибут будет хранить имя в формате 8.3, для POSIX символы имени файла с учетом регистра и стандартное имя для Win32 подсистемы. Один атрибут может содержать имя сразу для двух подсистем (обычно, 3 – Win32|DOS, если имя влезает в формат 8.3). Во-вторых, атрибут используется для организации индекса в структуре каталогов, где он выступает как индексный элемент. Заметьте, ошибочным является утверждение, что индексы дублируют только один $FILE_NAME для файла, как раз наоборот, если файл имеет в записи MFT один $FILE_NAME для DOS и другой для Win32, то оба они будут дублироваться и в индексах.

Атрибут $STANDART_INFORMATION


Идентификатор 0x10.

Смещение

Тип

Описание

0x0 ULARGE_INTEGER Время создания.
0x8 ULARGE_INTEGER Время последней модификации атрибута с данными.
0x10 ULARGE_INTEGER Время последней модификации данной записи.
0x18 ULARGE_INTEGER Время последнего доступа к записи.
0x20 ULONG Атрибуты файла (см. следующую таблицу).
0x24 ULONG Максимальное количество версий.
0x28 ULONG Номер версии.
0x2C ULONG Идентификатор класса.
0x30 ULONG Идентификатор владельца. (начиная с w2k)
0x34 ULONG Идентификатор безопасности. (начиная с w2k)
0x38 ULARGE_INTEGER Изменение квоты. (начиная с w2k)
0x40 ULARGE_INTEGER Номер USN. (начиная с w2k)
<


Возможны следующие атрибуты файла: Флаг

Описание

0x1 Только чтение
0x2 Скрытый
0x4 Системный
0x20 Архивный
0x80 Устройство
0x100 Временный
0x200 Разреженный
0x400 Точка подключения
0x800 Сжатый
0x1000 Автономный
0x2000 Содержимое не индексируется
0x4000 Зашифрованный
Атрибут $ STANDART_INFORMATION всегда резидентен. Атрибут содержит основную информацию о файле и существует для каждого файла и каталога. Обычно $STANDART_INFORMATION располагается первым атрибутом в списке. Поля временных штампов присутствуют также и в атрибуте $FILE_NAME. Идентификатор безопасности используется как индекс в файле $Secure.

Атрибут $DATA.

Атрибут $DATA (идентификатор 0x80) в своем теле содержит данные файла и может быть как резидентным, если атрибут умещается в MFT-записи, так и нерезидентным. На уровне атрибута $DATA реализуются Alternate Data Streams или альтернативные потоки данных. Поток в NTFS – это данные файла. По умолчанию, все записываемые данные в файл попадают в безымянный поток $DATA. Альтернативные потоки – это дополнительные атрибуты $DATA для файла, в которых также могут храниться данные. Главный безымянный поток обычно следует последним в списке атрибутов, а все последующие альтернативные потоки будут добавляться за ним. NTFS адресует потоки (атрибуты $DATA) по их именам (имена атрибутов). Смещение имени потока вычисляется также как смещение имени любого атрибута, как сумма смещения заголовка атрибута со смещением имени, которое указывается в заголовке (при присутствии значения длины имени, при его отсутствии мы имеем дело в неименованным потоком).

Жесткие связи.

Жесткие связи (hard links) – механизм POSIX, который позволяет из разных каталогов обращаться к одному файлу. На уровне NTFS, жесткая ссылка – это дополнительный атрибут $FILE_NAME в MFT-записи файла и такой же атрибут в родительской директории самой ссылки (в этом случае структура INDEX_ENTRY_HEADER_DIR в поле ссылки на файл содержит ссылку на MFT запись для самого файла).


Жесткие связи создаются на уже существующий файл и их количество указывается в заголовке MFT записи файла в поле link_count. Если на файл нет жестких связей, это поле равно единице. Если link_count больше единицы тогда количество связей определяется как link_count минус 1. Отличие атрибута $FILE_NAME, который описывает жесткую ссылку в MFT записи, от атрибута, который описывает одно из имен файла, в том, что поле родительской директории содержит ссылку на родительскую директорию самой ссылки, а не ссылку на директорию, которой принадлежит файл.

Для перечисления всех жестких ссылок на файл нужно получить их количество как MFT_RECORD.link_count – 1 и ссылку на родительский каталог файла. Если кол-во ссылок больше нуля, тогда пройтись по всем атрибутам $FILE_NAME и сравнить значения полей родительских ссылок с ссылкой на родительский каталог файла. В случае несоответствия, мы имеем дело с жесткой ссылкой.

Метафайлы.

Первые 11 записей MFT описывают основные метафайлы NTFS. За ними идет не используемая область из нескольких записей и далее пользовательские файлы и каталоги. Структура и описание метафайлов даны в следующей таблице. Индекс MFT

Имя файла

Описание

0 $Mft Описывает местоположение MFT файла. При поиске записей через их индексы считывается атрибут $DATA. Стартовый адрес тела атрибута $DATA совпадает с местоположением самого $Mft. В случае, если MFT занимает один отрезок, т.е. не фрагментирован, его можно индексировать как линейный массив, но как правило, MFT фрагментирован, поэтому для поиска записи по индексу нужно искать соответствующий отрезок.
1 $MftMirr Копия первых четырех записей MFT.
2 $LogFile Файл журнала транзакций. Содержит информацию для восстановления NTFS после сбоя.
3 $Volume Содержит информацию о томе, такую как метка тома и версия тома.
4 $AttrDef Определяет имена и идентификаторы атрибутов.
5 . Корневой каталог. Все метафайлы содержатся в корневом каталоге.
6 $Bitmap Файл распределения кластеров на томе. В каждом бите тела содержит статус выделения кластера. Читается также как атрибут $BITMAP для каталогов, но в роли индекса индексной записи выступает номер кластера.
7 $Boot Описывает загрузочный сектор. Стартовый адрес тела нерезидентного атрибута $DATA равен нулю, что соответствует началу тома, где бут сектор, собственно, и расположен.
8 $BadClus Содержит информацию о плохих кластерах тома.
9 $Secure Содержит дескрипторы защиты для всех файлов тома.
10 $Upcase Предназначен для сопоставления имен с буквами в верхнем регистре.
11 $Extend Каталог расширенных метаданных, таких как квоты, точки разбора и идентификаторы объектов.
12 - 15 Записи пустые.
16 - 24 Записи не используются.
Пользовательские файлы и каталоги.
Метафайлы в NTFS могут быть и дополнительными или необязательными. Такие файлы хранятся в директории $Extend и за ними строго не закреплены индексы в MFT. К дополнительным метафайлам относятся $Quota – информация о дисковых квотах, $Reparse – используется для точек разбора (reparse point), $ObjId – позволяет связывать идентификатор объекта файла с записью MFT.

Метафайлы $Secure, $Extend, а также все дополнительные появились начиная с NTFS v3.0, т. е. с Windows 2000.


Содержание раздела