Поделиться через


Когда следует завершить IRP

Драйвер должен инициировать завершение IRP при выполнении любого из следующих условий:

  • Драйвер определяет, что обработка IRP не может выполняться из-за недопустимых параметров или других условий.

  • Драйвер может обработать запрошенную операцию ввода-вывода, не передавая IRP в стек драйвера, и операция завершена.

  • IRP отменяется. (См . раздел Отмена IRP.)

Если эти условия не выполняются, подпрограмма диспетчеризации водителя должна передать IRP ниже следующему драйверу или обработать запрос ввода-вывода. Если выполняется одно из условий, драйвер должен вызвать IoCompleteRequest.

Если драйвер завершает запрос, так как обработка не может быть выполнена, или если он завершает запрос путем обработки запрошенной операции без фактического доступа к устройству, он обычно вызывает IoCompleteRequest из одной из своих подпрограмм диспетчеризации. Дополнительные сведения см. в разделе Завершение irP в подпрограммах диспетчеризации.

Если драйвер должен получить доступ к устройству для удовлетворения запроса, он обычно вызывает IoCompleteRequest из подпрограммы DpcForIsr . Эти процедуры подробно рассматриваются в разделе Прерывания обслуживания.