<<
>>

Общая картина

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

Создание файла

В этом примере создается файл \dirl\filel.dat; предполагается, что каталог dirl уже

существует в корневом каталоге. Размер файла составляет 4000 байт, а размер

кластера равен 2048 байт. Создание файла начинается с чтения первого сектора файловой системы и обработки загрузочного сектора для определения размера кластера, начального адреса MFT и размера записи MFT. Мы читаем из MFT первую запись (файл $MFT) и обрабатываем ее для определения структуры остальных записей MFT. Информация хранится в атрибуте $DATA. Для нового файла выделяется запись MFT. Чтобы найти неиспользуемую запись, мы обрабатываем атрибут $В1ТМАР файла $MFT. Первая свободная запись (304) выделяется новому файлу, а соответствующий бит карты устанавливается в 1. Происходит инициализация записи MFT 304, для чего мы находим запись в MFT и стираем ее содержимое. В записи создаются атрибуты $STAN- DARD_INFORMATION и $FILE_NAME, а временные штампы инициализируются текущим временем. В заголовке записи MFT устанавливается флаг использования. Далее для файла необходимо выделить два кластера; при этом используется атрибут $DATA файла $Bitmap, находящийся в записи MFT 6. Два смежных кластера, 692 и 693, находятся с использованием алгоритма оптимального подбора. Соответствующие биты карты для кластеров устанавливаются равными 1. В кластеры записывается содержимое файла, и атрибут $DATA обновляется адресами кластеров. В записи MFT обновляются временные штампы. На следующем шаге создается информация об имени файла.

Информация dirl ищется в корневом каталоге, находящемся в записи MFT 5. Мы читаем атрибуты $INDEX_R00T и $INDEX_ALL0CATI0N и перемещаемся по отсортированному дереву. После обнаружения индексного элемента dirl из него берется адрес записи MFT 200. Обновляется время последнего обращения к каталогу. Обработка атрибута $INDEX_R00T записи MFT 200 дает местонахождение файла filel.dat. Для файла создается новый индексный элемент, и все дерево сортируется заново. Это может привести к перемещению индексных элементов внутри узла. У нового индексного элемента в поле базового адреса указана запись MFT 304, а временные штампы и флаги заданы соответствующим образом. Для каталога обновляется время последней модификации и обращения. Каждый из перечисленных этапов может сопровождаться созданием записей в журнале файловой системы $LogFile и журнале изменений \$Extend\$UsrJrnl. Если в системе поддерживаются квоты, новый размер файла включается в квоту пользователя в файле \$Extend\$Quota.

Связи между компонентами и итоговое состояние системы показаны на рис. 12.13.

Битоваяя карта записи MFT              Журнал              $LogFile


Пример удаления файла

Теперь посмотрим, что происходит при удалении файла \dirl\filel.dat. Удаление файла начинается с чтения первого сектора файловой системы и обработки загрузочного сектора для определения размера кластера, начального адреса MFT и размера записи MFT. Мы читаем из MFT первую запись (файл $MFT) и обрабатываем ее для определения структуры остальных записей MFT. Информация хранится в атрибуте $ DATA. Далее необходимо найти каталог dirl, поэтому мы обрабатываем запись MFT корневого каталога (5) и перемещаемся по индексу в атрибутах $INDEX_R00T и $INDEX_ALLOCATION. Из обнаруженного элемента dirl берется адрес записи MFT 200. Обновляется время последнего обращения к каталогу. Мы обрабатываем атрибут $INDEX_R00T записи MFT 200 и ищем в нем элемент filel.dat.

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

Запись MFT 304 освобождается сбросом флага использования. Также обрабатывается атрибут $DATA файла $Bitmap, и в нем обнуляется бит данной записи. Обрабатываются нерезидентные атрибуты записи MFT 304; соответствующие кластеры переводятся в свободное состояние в битовой карте файла \$Bitmap. В нашем примере освобождаются кластеры 692 и 693. Каждый из перечисленных этапов может сопровождаться созданием записей в журнале файловой системы $LogFile и журнале изменений \$Extend\$UsrJrnl. Если в системе поддерживаются квоты, новый размер файла вычитается из квоты пользователя в файле \$Extend\$Quota.

Итоговое состояние показано на рис. 12.14. Обратите внимание: при удалении файла в NTFS Windows не стирает указатели. Таким образом, связь между записью MFT и кластером сохраняется, а связь между именем файла и записью MFT тоже продолжала бы существовать, если бы запись не была потеряна в результате пересортировки.

Битовая карта записи MFT              Журнал              $LogFile

Рис. 12.14. Состояние системы после удаления файла \dirl\filel.dat. Серым цветом помечены освобождающиеся блоки

<< | >>
Источник: Кэрриэ Б.. Криминалистический анализ файловых систем. 2007

Еще по теме Общая картина:

  1. Общая картина
  2. Общая картина
  3. Общая картина
  4. Общая картина
  5. КУЛЬТУРНАЯ КАРТИНА МИРА
  6. Какими мне кажутся картины
  7. Картина мира. 
  8. Картина мира. 
  9. В. В. Казютинский. Астрономия и современная картина мира, 1996
  10. Содержание творчества — «картины сердцам