Windows - статьи




Каталоги


Каталог представляется записью MFT и содержит ссылки на файлы и другие каталоги. NTFS умеет быстро находить определенный файл в каталоге, потому что каталог хранит информацию о содержащихся в нем файлах в формате дерева. Поиск файла по упорядоченному дереву занимает намного меньше времени, чем при линейном поиске. В свою очередь, это накладывает дополнительные, незначительные временные издержки, при добавлении файлов/каталогов в дерево, на поддержании дерева в упорядоченном виде.

В NTFS используется понятие индекса, которое пришло из баз данных. Индекс - это коллекция элементов (атрибутов), хранящихся в отсортированном порядке. NTFS использует B+ деревья для организации индекса. Для таких деревьев в одном узле дерева может содержаться несколько значений. В NTFS эти значения называются индексными элементами. В качестве индексного элемента может выступать любой атрибут, по которому будет производиться индексация. Для индексов каталогов это всегда атрибут $FILE_NAME, для каждого файла/каталога, содержащегося в нем. Т. о. на каждый файл/каталог приходится как минимум две структуры FILE_NAME, первый как атрибут у файла, а второй, используемый для индекса. Узел дерева хранит последовательность атрибутов $FILE_NAME. Для хранения узлов дерева используются два типа атрибутов $INDEX_ROOT, который присутствует всегда для любой директории и $INDEX_ALLOCATION, который может и не присутствовать для небольших каталогов.

Индексы также используются для метафайла $Secure, который содержит дескрипторы защиты для файлов.


Рис. 4. Дерево каталога NTFS.

Индексный узел наделен заголовком INDEX_HEADER.

typedef struct _INDEX_HEADER //заголовок узла { /*0x00*/ ULONG entries_offset; //байтовое смещение первого индексного элемента, //относительно заголовка узла /*0x04*/ ULONG index_length; //размер узла в байтах /*0x08*/ ULONG allocated_size; //выделенный размер узла /*0x0C*/ ULONG flags; } INDEX_HEADER, *PINDEX_HEADER;

Индексные узлы хранятся в атрибутах $INDEX_ROOT и $INDEX_ALLOCATION.


Содержание  Назад  Вперед