Завершение IRP

"Завершение IRP" — это сокращенная фраза, которая означает "разрешить всем членам стека драйверов завершить операцию ввода-вывода". После завершения IRP диспетчер операций ввода-вывода уведомляет инициирующее приложение о завершении запрошенной операции ввода-вывода.

Когда драйвер завершает обработку IRP, он вызывает IoCompleteRequest (обычно из подпрограммы DpcForIsr ). Это приводит к тому, что диспетчер операций ввода-вывода определяет, настроили ли какие-либо драйверы более высокого уровня процедуры IoCompletion для IRP. Если это так, то каждая подпрограмма IoCompletion вызывается, по очереди, пока каждый многоуровневый драйвер в цепочке не завершит IRP.

Когда все драйверы завершат IRP, диспетчер ввода-вывода возвращает состояние исходному инициатору запроса операции. Обратите внимание, что драйвер более высокого уровня, который настраивает IRP, созданный драйвером, должен предоставить подпрограмму IoCompletion , чтобы освободить созданное им IRP.

В этом разделе рассматриваются следующие вопросы.

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

Завершение IRP в подпрограммах диспетчеризации

Использование процедур IoCompletion