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


Процедура DriverEntry


Процедура DriverEntry присутствует в любом драйвере и имеет данное стандартное имя. Драйверы "в-стиле-NT" выполняют в DriverEntry большую работу, нежели WDM драйвера &#8212 последние откладывают часть работы по инициализации устройства до момента обнаружения устройства системой, когда будет вызвана процедура AddDevice.

Таблица 8.1. Параметры вызова функции DriverEntry

NTSTATUS DriverEntry IRQL == PASSIVE_LEVEL
Параметры Описание
IN PDRIVER_OBJECT pDriverObject Адрес объекта драйвера
IN PUNICODE_STRING pRegistryPath Путь в регистре к подразделу драйвера
Возвращаемое значение • STATUS_SUCCESS

• STATUS_XXX &#8212 код ошибки

Получив от Диспетчера ввода/вывода указатель на структуру DRIVER_OBJECT (см. заголовочные файлы DDK ntddk.h или wdm.h), драйвер должен заполнить в ней определенные поля, а именно:

  • Поле pDriverObject-&#62DriverUnload &#8212 для регистрации собственной функции Unload, которая вызывается перед выгрузкой драйвера.
  • Поле pDriverObject-&#62DriverStartIo &#8212 для регистрации собственной функции StartIo, которая необходима для организации обработки очереди необработанных запросов System Queuing.
  • Поле pDriverObject-&#62DriverExtension-&#62AddDevice &#8212 в структуре расширения объекта драйвера DRIVER_EXTENSION (см. ntddk.h или wdm.h), в котором WDM драйвер регистрирует собственную процедуру AddDevice.
  • В массиве pDriverObject-&#62MajorFunction[IRP_MJ_Xxx] драйвер регистрирует точки входа в собственные рабочие процедуры.

Регистрация рабочих процедур происходит обычно в виде:

DriverObject-&#62MajorFunction[IRP_MJ_READ]= ReadWrite_IRPhandler; DriverObject-&#62MajorFunction[IRP_MJ_WRITE]=ReadWrite_IRPhandler; DriverObject-&#62MajorFunction[IRP_MJ_DEVICE_CONTROL]= DeviceControlRoutine; . . . . . . . . .

Однако для фильтр-драйверов модели WDM, которым интересен только определенный тип запросов, возможен следующий тип регистрации:

int i; for( i=0; i&#60IRP_MJ_MAXIMUM_FUNCTION; i++) { DriverObject-&#62MajorFunction[i]= myPassIrpDown; } DriverObject-&#62MajorFunction[IRP_MJ_DEVICE_CONTROL]= DeviceControlRoutine;




Начало  Назад  Вперед



Книжный магазин