Пакеты запросов ввода-вывода

Большинство запросов, отправляемых драйверам устройств, упаковываются в пакеты запросов ввода-вывода (IRP). Компонент операционной системы или драйвер отправляет IRP драйверу, вызывая IoCallDriver, который имеет два параметра: указатель на DEVICE_OBJECT и указатель на IRP. У DEVICE_OBJECT есть указатель на связанный DRIVER_OBJECT. Когда компонент вызывает IoCallDriver, мы говорим, что компонент отправляет IRP объекту устройства или IRP драйверу, связанному с объектом устройства. Иногда используется фраза передает IRP или пересылает IRP вместо отправки IRP.

Обычно IRP обрабатывается несколькими драйверами, расположенными в стеке. Каждый драйвер в стеке связан с объектом устройства. Дополнительные сведения см. в разделе Узлы устройств и стеки устройств. Когда IRP обрабатывается стеком устройств, IRP обычно сначала отправляется в верхний объект устройства в стеке устройств. Например, если IRP обрабатывается стеком устройств, показанным на этой схеме, IRP будет сначала отправлен в объект устройства фильтра (Filter DO) в верхней части стека устройств.

схема узла устройства и его стека устройств.

Передача IRP вниз по стеку устройств

Предположим, что диспетчер ввода-вывода отправляет IRP в фильтр DO на схеме. Драйвер, связанный с фильтром DO, AfterThought.sys, обрабатывает IRP, а затем передает его в объект функционального устройства (FDO), который является следующим нижним объектом устройства в стеке устройств. Когда драйвер передает IRP следующему нижнему объекту устройства в стеке устройств, мы говорим, что драйвер передает IRP вниз по стеку устройств.

Некоторые irP передаются вплоть до стека устройств в объект физического устройства (PDO). Другие irP никогда не достигают PDO, так как они выполняются одним из драйверов над PDO.

IrP являются автономными

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