Как производится обработка вызовов функций, экспортируемых по имени.

1) Загрузчик просматривает строки, на которые указывает таблица имён функций, для того чтобы найти имя требуемой функции. Если имя найдено, определяется индекс в таблице имён функций.

2) По найденному индексу из таблицы номеров функций извлекается индекс в таблице адресов функций. Из таблицы адресов извлекается RVA требуемой функции.

Ресурсы РЕ-файла.

Организованы в виде иерархического дерева. Информация о ресурсах содержится в секции .rsrc. Организация ресурсов имеет следующую структуру.

Для каждого типа ресурса содержатся подкаталоги первого уровня, или структура data, которая содержит указатель на конкретное описание ресурса.

Базовые поправки РЕ-файла.

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

Информация, хранящаяся в секции базовых поправок, хранится в .reloc, позволяет загрузчику РЕ-файла исправить адреса в загруженном модуле. Если же загрузчику удаётся загрузить файл по предполагаемому базовому адресу, то информация в секции .reloc игнорируется. Базовые поправки представляют собой перечень тех мест в программе, в котором нужно добавить требуемую величину дельта отображения. D=реальный адрес – базовый адрес.

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

Зачем это надо? Это необходимо для экономии места.

32. Методы отслеживания изменений файловой системы.

Для получения информации об изменениях в файловой системе необходимо выполнить следующие действия:

1. Сначала приложение вызовом FindFirstChangeNotification — сообщает системе о том, что оно заинтересовано в получении уведомлений. Функция FindFirstChangeNotification никаких изменений не ищет, а просто создает объект «Уведомление об изменении файла» и возвращает его дескриптор.

2. Получив дескриптор объекта «Уведомление», можно использовать его в функциях WaitForSingleObject и WaitForMultipleObjects. Объект переходит в незанятое состояние всякий раз, когда в файловой системе происходит изменение, соответствующее критериям, указанным при вызове FindFirstChangeNotification.

Объект «Уведомление»об изменении файла» можно рассматривать как собы­тие со сбросом вручную, в которое встроена дополнительная логика: событие переходит в незанятое состояние при каком-либо изменении в файловой систе­ме. После возврата из WaitForSingleObject или WaitForMultipleObjects программа «Понимает», что ей надо вновь просмотреть дерево каталогов и обновить информацию о файлах и каталогах.

Система накапливает информацию об изме­нениях и сообщает сразу обо всех. Например, если пользователь ввел команду: deltree чтобы удалить все файлы и подкаталоги в текущем каталоге, поток командного процессора успеет удалить как минимум несколько файлов, прежде чем система переведет объект «Уведомление об изменении файла» в незанятое состояние и тем самым позволит программе, отслеживающей изменения, возобновить исполнение. Дескриптор этого объекта не переводится в свободное состояние при удалении каждого файла, что значительно повышает производительность системы.

3. Когда объект «Уведомление об изменении файла» становится свободным. Программа, отслеживающая изменения, возобновляется и может выполнить любые нужные действия, закончив, она должен вызвать функцию FlndNextChangeNotification;

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

Таким образом, если программа, отслеживающая изменения, снова ждет, когда объект станет незанятым, его ожидание немедленно прекращается, и он вновь «Пройдет» по дереву каталогов. После каждого вызова FindNextChangeNotification следует обязательнождать перевода объекта-уведомления в незанятое состояние. Иначе будут пропущены изменения в файловой системе.

4. Когда уведомления об изменениях файлов больше не нужны, следует закрыть объект-уведомление, вызвав: FindCloseChangeNotification.

33. Файловая система FAT. Структура системной области и области данных в FAT.

Имеет по одной записи для каждого кластера тома.

Размер записи определяется индексом в названии файловой системы (12, 16, 32). Первая запись содержит дескриптор носителя. Это константа, определяющая тип диска, поэтому нумерация кластеров начинается с двух. Записи в таблице FAT определяют цепочки размещения файлов и каталогов, то есть каждая запись в FAT содержит номер следующего кластера, принадлежащего конкретному файлу или каталогу. Если очередная запись FAT содержит FFFF (FAT16), или FFF (FAT12), то значит, этот кластер является последним для файла. Если запись содержит 0, то кластер свободен, если FFF7 (FAT16) или FF7 (FAT12), то значит, кластер является сбойным (BAD).

Пример.

FILE1 занимает кластеры 2, 3, 4.

FILE2 фрагментирован и содержится в кластерах 5, 6, 8.

FILE3 занимает только один кластер.

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

Размер корневого каталога в FAT12 и FAT16 ограничен. Задаётся при форматировании диска. В FAT32 корневой каталог не входит в системную область, то есть системная область включает загрузочную запись, состоящую из нескольких секторов и две копии FAT. В FAT32 размер корневого каталога не ограничен. В ОС DOS принято именование файлов в формате 8.3. Windows использует длинные имена файлов. В случае, если имя файла не соответствует формату 8.3 каждый каталог содержит для каждого файла несколько записей. Одна под короткое имя. Идёт 6 первых символов, затем ~номер. расширение. Несколько записей используется для длинного имени, причём в каждой записи каталога содержится 11 символов имени. FAT32 впервые появилась в Windows 95 OEM Service Release 2. Поддерживается Windows ME, 2000. Также поддерживается в Windows NT 4.0 с установкой специальных драйверов.

34. Назначение NTFS. Основные особенности и возможности NTFS. Структура файловой системы NTFS. Понятие тома и файла в NTFS.

Является основной файловой системой для Windows NT. Ориентирована на

1. Клиент-серверные приложения.

2. Сложные технические и научные приложения.

3. Сетевые приложения для больших корпоративных сетей.

Особенности NTFS.

1. Восстанавливаемость. В случае отключения питания или какого-либо другого сбоя NTFS восстанавливает дисковые тома и возвращает их в целостное состояние. Восстановление происходит автоматически при первом обращении к диску. NTFS дублирует наиболее важную системную информацию.

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

3. Избыточность данных и отказоустойчивость. В Windows файловая система NTFS организована с помощью драйвера отказоустойчивого диска. Данные дублируются на несколько дисков, создаются зеркальные диски.

4. Сжатие данных.

5. Шифрование данных, хранимых на диске.

Возможности NTFS.

1. Множественные потоки данных. В NTFS файл – это набор атрибутов, причём данные – это один из атрибутов файла. В файле можно создавать несколько атрибутов данных.

Myfile.dat: stream2

2. Имена в UNICODE. Это 16-разрядная кодировка символов. В FAT используется 8-рязрядная кодировка символов. В UNICODE 65536 символов. Имена файлов могут содержать до 255 символов, и содержать несколько точек и пробелов.

3. Универсальное средство индексирования. NTFS позволяет индексировать атрибуты файла. В настоящий момент поддерживается индексирование по имени файла. В каждом каталоге файлы и каталоги расположены упорядоченно, что ускоряет поиск.

4. Переназначение плохих кластеров. Позволяет динамически помечать плохие кластеры.

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