- •Лабораторна робота № 3 Дослідження файловой системи ntfs
- •Вимоги до лабораторної бази та перелік необхідного програмного забезпечення
- •Теоретичні відомості
- •Структура BootSector
- •Структура mft
- •Структура заголовка атрибута
- •Контрольные вопросы:
- •Порядок выполнения лабораторной работы № 3
- •Задание на дом:
Структура mft
Рассмотрим теперь структуру файла $MFT, чтобы понять, где в нем размещается информация о файлах.
Прежде всего, файл $MFT состоит из записей. Каждая запись, длина которой обычно составляет 1 Kb, содержит информацию об одном файле. То есть для хранения данных об одном файле отводится два сектора. Сначала в $MFT следуют записи, содержащие информацию о метафайлах: самой $MFT , ее копии $MFTMirror, и прочих файлах: $LogFile, $Volume, $AttrDef и др., а затем уже о файлах, создаваемых операционной системой, прикладными программами и самим пользователем.
В принципе, возможно, что информация, относящаяся к какому-либо файлу, не поместится в отведенных два сектора (базовая запись). Тогда она размещается в другом месте $MFT, образуя расширенную запись. Это характерно для файлов, значительно изменяющих свой размер по мере работы с ними пользователей. Это могут быть файлы баз данных, файлы офисных документов и т.д.
Порядок записей в метафайле $MFT:
-
Номер записи
Название файла метаданных
Назначение
0
$MFT
Master File Table
1
$MFTmirr
Копия первых 16 записей $MFT
2
$LogFile
Файл журнала транзакций
3
$Volume
Информация о разделе (метка тома, версия NTFS)
4
$ AttrDef
Список используемых атрибутов файлов
5
$
Корневой каталог файловой системы
6
$Bitmap
Карта распределения свободных кластеров тома
7
$Boot
Загрузочный сектор раздела NTFS
8
$BadClus
Перечень всех испорченных кластеров
9
$Secure
Атрибуты безопасности (NTFS 5.0)
A
$UpCase
Список всех прописных символов в UNICODE
B
$Extend
Расширенная информация NTFS 5.0:
$Extend\$ObjID
Файл ID объекта
$Extend\$Quota
Файл квотирования
$Extend\$Reparse
Файл точки повторной обработки
$Extend\ $UsnJrnl
Файл журнала изменений
C
Зарезервировано
D
Зарезервировано
E
Зарезервировано
F
Зарезервировано
. . .
Записи файлов ОС, приложений, пользовательских
Структура записи в файле $MFT
Если рассматривать каждую запись $MFT, то она, в свою очередь, имеет внутреннюю структуру и состоит из заголовка и областей переменной длины, называемых атрибутами файлов (File Attribute). Ниже приведена структура заголовка записи:
Смещение, байт |
Длина, байт |
Описание |
0x00 |
4 |
Текстовая строка "FILE" - признак записи $MFT |
0x04 |
2 |
Смещение массива корректировки записи Update Sequence |
0x06 |
2 |
Размер массива корректировки записей Update Sequence |
0x10 |
2 |
Последовательный номер сектора в записи $MFT |
0x12 |
2 |
Счетчик ссылок |
0x14 |
2 |
Смещение начала списка атрибутов |
0x16 |
2 |
Флажки, отмечающее состояние записи $MFT (0 – удален, 1 – нет) |
0x18 |
4 |
Реальный размер записи $MFT |
0x1C |
4 |
Размер памяти, занимаемый записью $MFT |
0x20 |
8 |
Файловый номер (File Reference) базовой записи $MFT |
0x28 |
2 |
Максимальное значение идентификатора атрибута, увеличенное на единицу |
0x2A |
2 |
Массив корректировки записи $MFT размером 2*(N-1) байт, где N - значение размера массива корректировки записи из поля со смещением 0x06 |
. . . |
|
Список атрибутов файла |
Как видно из таблицы, характерным признаком начала каждой записи является содержимое первых четырех байт сектора, где указывается текстовая строка "FILE" в коде ASCII.
Поскольку заголовок записи имеет переменную длину, точная величина смещения списка атрибутов в таблице не указана. В каждой записи этот адрес может быть различным, поэтому в заголовке он указывается в двухбайтном поле, расположенном по смещению 0x14.
Всего различаются 14 атрибутов, которые сведены в прилагаемой таблице:
Тип |
Имя |
Описание |
0x10 |
$STANDARD_INFORMATION |
Стандартный атрибут. Здесь хранится дата и время создания и последнего изменения файла, дата и время последнего доступа к файлу, флаги доступа к файлу, а также дата и время изменения записи $MFT, соответствующей данному файлу |
0x20 |
$ATTRIBUTE_LIST |
Список атрибутов. Если помимо базовой записи $MFT для файла создаются расширенные записи, в этом атрибуте перечисляются все атрибуты файла. Кроме того, здесь хранится информация о распределении этих атрибутов по записям $MFT (по базовой записи и по расширенным записям данного файла). |
0x30 |
$FILE_NAME |
Имя файла или каталога. В этом атрибуте хранится имя файла или каталога, набор флагов доступа, размер файла, а также ссылка на запись $MFT каталога, в котором хранится данный файл или каталог. |
0x40 |
$VOLUME_VERSION |
Версия NTFS для данного раздела. |
0x50 |
$SECURITY_DESCRIPTOR |
Дескриптор разграничения доступа. |
0x60 |
$VOLUME_NAME |
Имя тома. Это имя задается при форматировании раздела и может быть изменено пользователем. |
0x70 |
$VOLUME_INFORMATION |
Состояние тома. Здесь хранится версия драйвера, с помощью которого был создан данный раздел, а также флаг программы CHKDSK. Если этот флаг установлен, то при очередной перезагрузке операционной системы программа CHKDSK выполнит проверку данного раздела. |
0x80 |
$DATA |
Атрибут данных. Этот атрибут может содержать либо данные файла (если размеры файла не превышают размеры записи $MFT), либо список номеров кластеров, в которых располагается файл (список экстентов файла). |
0x90 |
$INDEX_ROOT |
Корневая вершина дерева типа B+, с применением которого в NTFS реализована система каталогов. |
0xA0 |
$INDEX_ALLOCATION |
Узлы ветвей дерева типа B+, с применением которого в NTFS реализована система каталогов. |
0xB0 |
$BITMAP |
Набор бит, описывающих использование отдельных записей $MFT или узлов дерева каталогов. |
0xC0 |
$SYMBOLIC_LINK |
Информация Reparse Point, используется в Microsoft Windows 2000 |
0xD0 |
$EA_INFORMATION |
Информация о расширенных атрибутах файловой системы HPFS. Используется для обеспечения совместимости NTFS с файловой системой HPFS, применяемой в IBM OS/2. |
0xE0 |
$EA |
Данные расширенных атрибутов файловой системы HPFS. |
В каждом файле обязательно присутствуют атрибуты $STANDARD_INFORMATION, $FILE_NAME и $DATA. Наличие остальных определяется типом файла и его особенностями. С другой стороны, некоторые одноименные атрибуты могут присутствовать в записи в нескольких экземплярах. Например, это - атрибут $FILE_NAME, в одном экземпляре которого указывает полное имя файла, а в другом – имя файла в стандарте "8.3" (стандарт MS-DOS).
