ВУЗ:
Составители:
94
3.1 Стандартные процедуры
Любой драйвер должен реализовывать основное множество
процедур и, возможно, еще несколько дополнительных подмножеств в
зависимости от разновидности драйвера. На рисунке 3.1 показан
стандартный цикл работы драйвера, заключающийся в обработке запроса
на прерывание IRP.
Ниже показаны основные процедуры, которые должен иметь каждый
драйвер.
DriverEntry
NTSTATUS
(*PDRIVER_INITIALIZE) (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
Каждый драйвер должен иметь инициализационную процедуру,
которую менеджер ввода-вывода вызывает автоматически, если эта
процедура называется DriverEntry.
Dispatch
NTSTATUS
(*PDRIVER_DISPATCH) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
Каждый драйвер должен иметь, по крайней мере, одну процедуру
Dispatch.
StartIo (или Queue-management)
VOID
(*PDRIVER_STARTIO) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
Если драйвер устройства не может завершить все возможные
запросы ввода-вывода в его Dispatch процедуре, он должен иметь либо
процедуру StartIo, либо заводить одну или более внутренних очередей и
управлять собственным механизмом отложенных запросов на прерывание.
3.1 Стандартные процедуры
Любой драйвер должен реализовывать основное множество
процедур и, возможно, еще несколько дополнительных подмножеств в
зависимости от разновидности драйвера. На рисунке 3.1 показан
стандартный цикл работы драйвера, заключающийся в обработке запроса
на прерывание IRP.
Ниже показаны основные процедуры, которые должен иметь каждый
драйвер.
DriverEntry
NTSTATUS
(*PDRIVER_INITIALIZE) (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
Каждый драйвер должен иметь инициализационную процедуру,
которую менеджер ввода-вывода вызывает автоматически, если эта
процедура называется DriverEntry.
Dispatch
NTSTATUS
(*PDRIVER_DISPATCH) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
Каждый драйвер должен иметь, по крайней мере, одну процедуру
Dispatch.
StartIo (или Queue-management)
VOID
(*PDRIVER_STARTIO) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
Если драйвер устройства не может завершить все возможные
запросы ввода-вывода в его Dispatch процедуре, он должен иметь либо
процедуру StartIo, либо заводить одну или более внутренних очередей и
управлять собственным механизмом отложенных запросов на прерывание.
94
Страницы
- « первая
- ‹ предыдущая
- …
- 92
- 93
- 94
- 95
- 96
- …
- следующая ›
- последняя »
