Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО.docx
Скачиваний:
5
Добавлен:
03.08.2019
Размер:
1.14 Mб
Скачать
  1. Метафайлы.

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

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

$MFTmirr копия первых 16 записей MFT, размещенная посередине диска

$LogFile файл поддержки журналирования (см. ниже)

$Volume служебная информация - метка тома, версия файловой системы, т.д.

$AttrDef список стандартных атрибутов файлов на томе

$. корневой каталог

$Bitmap карта свободного места тома

$Boot загрузочный сектор (если раздел загрузочный)

$Quota файл, в котором записаны права пользователей на использование дискового пространства (начал работать лишь в NT5)

$Upcase файл - таблица соответствия заглавных и прописных букв в имен файлов на текущем томе. Нужен в основном потому, что в NTFS имена файлов записываются в Unicode, что составляет 65 тысяч различных символов, искать большие и малые эквиваленты которых очень нетривиально.

  1. Файл BOOT.

  2. Атрибуты файла. Алгоритм раскрутки атрибутов файла

Структурно всякий атрибут стоит из атрибутного заголовка (attribute header) и тела атрибута (attribute body). Заголовок атрибута всегда хранится в файловой записи, расположенной внутри MFT (см. "Файловые записи"). Тела резидентных атрибутов хранятся там же. Нерезидентные атрибуты хранят свое тело вне MFT в одном или нескольких кластерах, перечисленных в заголовке данного атрибута в специальном списке (см. "Списки отрезков"). Если 8-разрдное поле, расположенное по смещению 08h байт от начала атрибутного заголовка, равно нулю - атрибут считается резидентным, а если единице, то - нет. Любые другие значения недопустимы.

Первые четыре байта атрибутного заголовка определяют его тип. Тип атрибута в свою очередь определяет формат представления тела атрибута. В частности, тело атрибута данных (тип: 80h - $DATA) представляет собой "сырую" последовательность байт. Тело атрибута стандартной информации (тип: 10h - $STANDARD_INFORMATION) описывает время его создания, права доступа и т.д. Подробнее см. "Типы атрибутов".

Следующие четыре байта заголовка содержат длину атрибута, выражаемую в байтах. Длина нерезидентного атрибута равна сумме длин его тела и заголовка, а длина резидентного атрибута равна длине его заголовка. Короче говоря, если к смещению атрибута добавить его длину, мы получим указатель на следующий атрибут (или маркер конца, если текущий атрибут - последний в цепочке).

Длина тела резидентных атрибутов, выраженная в байтах, хранится в 32-разрядном поле, расположенном по смещению 10h байт от начала атрибутного заголовка. 16-разрядное поле, следующее за его концом, хранит смещение резидентного тела, отсчитываемое от начала атрибутного заголовка. С нерезидентными атрибутами в этом плане все намного сложнее и для хранения длины их тела используется множество полей. Реальный размер тела атрибута (real size of attribute), выраженный в байтах, хранится в 64-разрядном поле, находящимся по смещению 30h байт от начала атрибутного заголовка. Следующее за ним 64-разрядное поле хранит инициализированный размер потока (initialized data size of the stream), выраженный в байтах и, судя по всему, всегда равный реальному размеру тела атрибута. 64-разрядное поле, расположенное по смещению 28h байт от начала атрибутного заголовка, хранит выделенный размер (allocated size of attribute), выраженный в байтах и равный реальному размеру тела атрибута округленному до размера кластера (в большую сторону).

Два 64-разрядных поля, расположенные по смещению 10h и 18h байт от начала атрибутного заголовка задают первый (starting VCN) и последний (last VCN) номер виртуального кластера, принадлежащего телу нерезидентного атрибута. Виртуальные кластеры представляют собой логические номера кластеров, не зависящие от своего физического расположения на диске. В подавляющем большинстве случаев номер первого кластера тела нерезидентного атрибута равен нулю, а последний - количеству кластеров занятых телом атрибута, уменьшенном на единицу. 16-разрядное поле, расположенное по смещению 20h от начала атрибутного заголовка содержит указатель на массив Data Runs, расположенный внутри этого заголовка и описывающий логический порядок размещения нерезидентного тела атрибута на диске (подробнее см. "Списки отрезков").

Каждый атрибут имеет свой собственный идентификатор (attribute ID), уникальный для данной файловой записи и хранящийся в 16-разрядном поле, расположенном по смещению 0Eh от начала атрибутного заголовка.

Если атрибут имеет имя (attribute Name), то 16-разрядное поле, расположенное по смещению 0Ah байт от атрибутного заголовка, содержит указатель на него. Для безымянных атрибутов оно равно нулю (а большинство атрибутов безымянны!). Имя атрибута хранится в атрибутном заголовке в формате UNICODE, а его длина определяется 8-разрядным полем, расположенным по смещению 09h байт от начала атрибутного заголовка.

Если тело атрибута сжато, зашифровано или разряжено, 16-разряное поле флагов, расположенное по смещению 0Ch байт от начала атрибутного заголовка не равно нулю.

  1. Файловая запись. Кодировки цепочки кластеров большого файла.

  1. Файловая запись короткого файла

Если файл имеет небольшой размер, то он может целиком располагаться внутри одной записи MFT, имеющей, например, размер 2 Кбайт. Если в байте со смещением 8 относительно начала атрибута данных находится нулевое значение, то не нужно прослеживать цепочки блоков VCN. Это означает, что файл находится внутри атрибута данных.

  1. Файловая запись длинного файла

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

  1. NTFS. Команда Copy.

При копировании файла из каталога 1 в каталог 2 создаётся новая файловая запись в MFT, описывающая файл в каталоге 2, и сохраняется прежняя, описывающая файл в каталоге 1. Также делается запись в файле, описывающем каталог 2, и сохраняется запись в файле, описывающем каталог 1. У файлов с нерезидентным атрибутом DATA данные копируются в новую область диска. Т. о. для каждого файла на диске существуют свои данные, т. е. файлу из каталога 1 соответствуют свои данные, а файлу из каталога 2 – свои. Это подтверждается разными значениями в списках отрезков записей в MFT файлов из каталогов 1 и 2.

  1. NTFS. Команда Delete.

При удалении файла в соответствующей ему файловой записи по смещению 16h устанавливается значение 00h. Также удаляется запись об этом файле в файле, описывающем каталог, из которого происходит удаление. Если удаляемый файл имеет нерезидентный атрибут DATA, то данные этого файла, расположенные вне MFT, сразу не удаляются. Поверх них будут записаны данные когда-либо позже.

  1. NTFS. Команда Move.

При перемещении файла из каталога 1 в каталог 2 не создаётся новая файловая запись в MFT, а используется прежняя. Также делается запись в файле, описывающем каталог Y, и удаляется запись в файле, описывающем каталог 1. Если удаляемый файл имеет нерезидентный атрибут DATA, то данные этого файла, расположенные вне MFT, не перемещаются. . Это подтверждается одинаковыми значениями в списках отрезков записей в MFT файлов из каталогов 1 и 2.

  1. Процессы. Общие сведения.

Процессом обычно называют экземпляр выполняемой программы.

Хотя на первый взгляд кажется, что программа и процесс понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс это набор ресурсов и данных, использующихся при выполнении программы. Процесс в Windows состоит из следующих компонентов:

- Структура данных, содержащая всю информацию о процессе, в том числе список открытых дескрипторов различных системных ресурсов, уникальный идентификатор процесса, различную статистическую информацию и т.д.;

- Адресное пространство - диапазон адресов виртуальной памяти, которым может пользоваться процесс;

- Исполняемая программа и данные, проецируемые на виртуальное адресное пространство процесса.