Эксперимент. Просмотр кластеров, принадлежащих файлу с помощью утилиты nfi.Exe

\TMP\Nfi\exp.h

$STANDARD_INFORMATION (resident)

$FILE_NAME (resident)

$DATA (nonresident)

logical sectors 471790-471794 (0x732ee-0x732f2)

File 33

\TMP\Nfi\h.h

$STANDARD_INFORMATION (resident)

$FILE_NAME (resident)

$DATA (nonresident)

logical sectors 471798-471809 (0x732f6-0x73301)

Здесь приведена информация о файлах \tmp\nfi\exp.h и \tmp\nfi\h.h, которую выдает утилита nfi . Наиболее интересно расположение на диске нерезидентного атрибута потока данных, дисковые номера кластеров которого в данном случае обозначаются как logical sectors.

Управление свободным и занятым дисковым пространством

В системе Windows учет свободных и занятых дисковых блоков ведется при помощи битового вектора (bit map или bit vector), например, 00111100111100011000001, где каждый блок представлен одним битом, принимающим значение 0 или 1, в зависимости от того, занят он или свободен. В файловой системе NTFS битовый массив сам является файлом. Его атрибуты и дисковые адреса хранятся в 6-й записи таблицы MFT.

Реализация директорий

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

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

Эксперимент. Просмотр кластеров, принадлежащих файлу с помощью утилиты nfi.Exe - student2.ru

Рис. 12.4. MFT запись для небольшого каталога

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

Поиск файла по имени

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

При поиске файла вначале при помощи механизма символьных ссылок в пространстве имен объектов решается задача трансляции имени диска "в стиле DOS" или буквы диска во внутренние имена устройств Windows. Для этого библиотечный вызов, содержащий имя файла в качестве параметра, передается библиотеке kernel32.dll и перед именем помещается название каталога именованных ресурсов "\??\" в пространстве имен менеджера объектов. В результате "F:\tmp\MyFile.txt" преобразуется в "\??\F:\tmp\MyFile.txt". Далее в каталоге \??\ ищется символьное имя "F:", которое является ссылкой на объект-раздел жесткого диска, например, "\Device\Harddisk\Volume5". Далее находится таблица MFT этого раздела, затем осуществляется навигация по каталогам и отыскивается искомый файл, см. рис. 12.5.

Эксперимент. Просмотр кластеров, принадлежащих файлу с помощью утилиты nfi.Exe - student2.ru

Рис. 12.5. Процесс поиска файла по имени

Для поиска файлов в каталоге применяются функции FindFirstFile и FindNextFile (см. MSDN).

Наши рекомендации