Курсовая работа: Переопределение назначений клавиш на клавиатуре в операционной системе Windows

- Функции для обработки пакетов IRP

- ISR

DiverEntry

Процедура DiverEntry должна присутствовать в любом драйвере. На данную процедуру возложена функция начальной инициализации и определение остальных точек входа в драйвер. Она выполняется в момент загрузки драйвера. В драйверах WDM значение этой функции значительно уменьшилось, большая часть работы возлагается на функцию AddDevice. Для регистрации точек входа в драйвер DriverEntry должна заполнить соответствующие поля в структуре объекта драйвера. Указатель на эту структуру передается в функцию.

Поле DriverUnload необходимо заполнить адресом процедуры, вызывающейся при выгрузке драйвера.

Поле DriverExtension->AddDevice необходимо заполнить адресом процедуры AddDevice.

Массив MajorFunctions заполняется адресами процедур обработки IRP пакетов. Процедура, зарегистрированная под номером N, обрабатывает IRP пакет с кодом N. Обычно драйверы используют не все эти процедуры, а регистрируют только нужные. Остальные же элементы массива заполняются адресом процедуры, выполняющей передачу пакета ниже по стеку драйверов.

AddDevice

Данная функция регистрируется, если драйвер поддерживает PnP. Одна из главных обязанностей AddDevice – это создание объекта устройства FDO и если необходимо подключение его к стеку драйверов устройства. Данная функция может создать несколько объектов устройств и подключить их к разным стекам. Более того, некоторые устройства FDO могут существовать, не будучи в связке с PDO. Они часто содаются для управления драйвером.

DriverUnload

Процедура DriverUnload необходима для того, чтобы сделать драйвер выгружаемым. В драйверах «в стиле NT» на эту процедуру возложен весь процесс выгрузки. Она обязана удалить все символьные ссылки, все объекты устройств, отключить (если нужно) прерывания от объектов, очистить память за собой. В PnP драйверах все эти действия возложены на обработчик пакетов IRP_MJ_PNP.

Процедуры обработки пакетов IRP

Функции, адреса которых записаны в массиве MajorFunctions, вызываются диспетчером ввода / вывода для обработки соответствующих запросов от клиентского драйвера (пользовательских приложений или модулей уровня ядра). Эти запросы оформляются в виде специальных структур – IRP пакетов.

При любом запросе Диспетчер формирует IRP. память для структуры IRP выделяется в нестраничной памяти. В IRP записывается код операции ввода вывода. Пакет IRP состоит из заголовка, который имеет постоянный размер и стека IRP. Стек имеет переменную длину.

Заголовок IRP пакета:

- Поле IoStatus типа IO _ STATUS _ BLOCK содержит два подполя

- Status содержит значение, которое устанавливает драйвер после обработки пакета.

- В Information чаще всего помещается число переданных или полученных байт.

- Поле AssociatedIrp . SystemBuffer типа void * содержит указатель на системный буфер для случая если устройство поддерживает буферизованный ввод / вывод.

- Поле MdlAddress типа PMDL содержит указатель на MDL список, если устройство поддерживает прямой ввод вывод.

- Поле UserBuffer типа void * содержит адрес пользовательского буфера для ввода / вывода.

- Типа Cancel типа BOOLEAN– это индикатор того, что пакет IRP должен быть аннулирован.

Стек IRP пакета

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

Каждая ячейка стека IRP содержит:

- MajorFunction типа UCHAR – это код, описывающий назначение операции

- MinorFunction типа UCHAR – это код, описывающий суб-код операции

- DeviceObject типа PDEVICE _ OBJECT – это указатель на объект устройства, которому был адресован данный запрос IRP

К-во Просмотров: 359
Бесплатно скачать Курсовая работа: Переопределение назначений клавиш на клавиатуре в операционной системе Windows