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


Когда завершать IRP

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

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

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

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

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

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

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