Шрифт:
Атрибут списка атрибутов (прямо каламбур) используется в тех случаях, когда все атрибуты файла не умещаются в базовой файловой записи, и файловая система вынуждена располагать их в расширенных файловых записях. Индексы расширенных файловых записей содержатся в атрибуте списка атрибутов, помещаемом в базовую файловую запись.
При каких обстоятельствах атрибуты не умещаются в одной файловой записи? Это может произойти в следующих случаях:
? файл содержит много альтернативных имен или жестких ссылок;
? файл сильно фрагментирован;
? файл содержит очень сложный дескриптор безопасности;
? файл имеет очень много потоков данных (т.е. атрибутов типа
Структура атрибута списка атрибутов приведена в табл. 6.8.
Таблица 6.8. Структура атрибута
Смещение | Размер | Описание |
---|---|---|
– - | Стандартный атрибутный заголовок (standard attribute header) | |
00h | 4 | Тип (type) атрибута (см. табл. 6.6) |
04h | 2 | Длина записи (record length) |
06h | 1 | Длина имени (name length), или ноль, если нет, условно — N |
07h | 1 | Смещение имени (offset to name), или ноль если нет |
08h | 8 | Начальный виртуальный кластер (starting VCN) |
10h | 8 | Ссылка на базовую/расширенную файловую запись |
18h | 2 | Идентификатор атрибута (attribute ID) |
1Ah | 2 N | Если N>0 , то имя в формате UNICODE |
Атрибут полного имени файла хранит имя файла в соответствующем пространстве имен. Таких атрибутов у файла может быть и несколько (например, имя Win32 и имя MS-DOS). Здесь же хранятся и жесткие ссылки (hard link), если они есть.
Структура атрибута полного имени приведена в табл. 6.9.
Таблица 6.9. Структура атрибута
Смещение | Размер | Описание |
---|---|---|
– - | Стандартный атрибутный заголовок (standard attribute header) | |
00h | 8 | Ссылка (file reference) на материнский каталог |
08h | 8 | C — время создания (creation) файла |
10h | 8 | A — время последнего изменения (altered) файла |
18h | 8 | M — время последнего изменения файловой записи (MFT changed) |
20h | 8 | R — время последнего чтения (read) файла |
28h | 8 | Выделенный размер (allocated size) файла |
30h | 8 | Реальный размер (real size) файла |
38h | 4 | Флаг (см. табл. 6.7) |
3Ch | 4 | Используется HPFS |
40h | 1 | Длина имени в символах — L |
41h | 1 | Пространство имен файла (filename namespace) |
42h | 2L | Имя файла в формате UNICODE без завершающего нуля |
Списки отрезков
Тела нерезидентных атрибутов хранятся на диске в одной или нескольких кластерных цепочках, называемых отрезками (runs). Отрезком называется последовательность смежных кластеров, характеризующаяся номером начального кластера и длиной. Совокупность отрезков называется списком (run-list или data run).
Внутренний формат представления списков не то, чтобы сложен, но простым его тоже на назовешь. Для экономии места длина отрезка и номер начального кластера хранятся в полях переменной длины. Если размер отрезка умещается в байт (т.е. его значение не превышает 255), то он займет один байт. По аналогии, если размер отрезка требует для своего представления двойного слова, то он займет двойное слово.