Основные коды функций IRP

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

Конкретные операции, выполняемые драйвером для заданного кода IRP_MJ_XXXX, зависят от базового устройства, особенно для IRP_MJ_DEVICE_CONTROL и запросов IRP_MJ_INTERNAL_DEVICE_CONTROL . Например, запросы, отправляемые драйверу клавиатуры, обязательно несколько отличаются от запросов, отправляемых драйверу диска. Однако диспетчер ввода-вывода определяет параметры и содержимое стека ввода-вывода для каждого определяемого системой основного кода функции.

Каждый драйвер более высокого уровня должен настроить соответствующее расположение стека ввода-вывода в IRP для драйвера следующего уровня и вызвать IoCallDriver либо с каждым входным IRP, либо с созданным драйвером IRP (если драйвер более высокого уровня удерживает входной IRP). Следовательно, каждый промежуточный драйвер должен предоставлять подпрограмму диспетчеризации для каждого основного кода функции, обрабатываемого базовым драйвером устройства. В противном случае новый промежуточный драйвер будет "разорвать цепочку" всякий раз, когда приложение или драйвер более высокого уровня пытается отправить запрос ввода-вывода в базовый драйвер устройства.

Драйверы файловой системы и устаревшие драйверы фильтров файловой системы также обрабатывают обязательное подмножество системных кодов функций IRP_MJ_XXX, некоторые из которые используют подчиненные коды функций IRP_MN_XXXX . Дополнительные сведения об обработке этих irP см. в разделе Основные коды функций IRP для драйверов файловой системы и устаревшие драйверы фильтров FS.

Драйверы обрабатывают заданные IRP с некоторыми или всеми из следующих основных кодов функций:

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_PNP

IRP_MJ_POWER

IRP_MJ_QUERY_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_SYSTEM_CONTROL

IRP_MJ_WRITE

Входные и выходные параметры, описанные в этом разделе, являются параметрами для конкретных функций в IRP.

Дополнительные сведения об IRP см. в разделе Обработка IRP.