Программирование драйверов Windows



Рабочие процедуры драйвера - часть 2


Диспетчер ввода/вывода заполняет пропущенные места в массиве MajorFunction значением указателя на функцию _IoInvalidDeviceRequest прежде, чем обращается к процедуре DriverEntry.

Все функции драйвера, участвующие в обработке запросов и подлежащие занесению в таблицу (массив) MajorFunction используют один и тот же протокол вызовов, что включает число и тип передаваемых им параметров и тип вызова. Рабочие процедуры выполняются на PASSIVE_LEVEL уровне IRQL, что означает, что они могут обращаться к ресурсам страничной памяти. (Разумеется, возможны ситуации искусственного изменения этого правила, как это было показано в примере Example.sys главы 3.)

Таблица 8.7а. Прототип, описывающий рабочую (dispatch) процедуру драйвера

NTSTATUS DispatchRoutine IRQL == PASSIVE_LEVEL
Параметры Описание
IN PDEVICE_OBJECT pDevObject Указатель на объект устройства, для которого предназначается IRP запрос
IN PRIP pIrp Указатель на пакет IRP, описывающий этот запрос
Возвращаемое значение

o STATUS_SUCCESS &#8212 запрос обработан o STATUS_PENDING &#8212 ожидается обработка запроса o STATUS_XXX &#8212 код ошибки




Содержание  Назад  Вперед