Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ОС мои.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.82 Mб
Скачать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]