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


Коды основных функций IRP

Each driver-specific I/O stack location (IO_STACK_LOCATION) for every IRP contains a major function code (IRP_MJ_XXX), which tells the driver what operation it or the underlying device driver should carry out to satisfy the I/O request. Каждый драйвер в режиме ядра должен предоставлять подпрограммы отправки для основных кодов функций, которые он должен поддерживать.

The specific operations a driver carries out for a given IRP_MJ_XXX code depend somewhat on the underlying device, particularly for IRP_MJ_DEVICE_CONTROL and IRP_MJ_INTERNAL_DEVICE_CONTROL requests. Например, запросы, отправленные драйверу клавиатуры, обязательно отличаются от отправленных на драйвер диска. Однако диспетчер операций ввода-вывода определяет параметры и содержимое расположения стека ввода-вывода для каждого системного кода основной функции.

Every higher-level driver must set up the appropriate I/O stack location in IRPs for the next-lower-level driver and call IoCallDriver, either with each input IRP, or with a driver-created IRP (if the higher-level driver holds on to the input IRP). Следовательно, каждый промежуточный драйвер должен предоставлять подпрограмму отправки для каждого основного кода функции, который обрабатывает базовый драйвер устройства. В противном случае новый промежуточный драйвер будет "разрывать цепочку", когда приложение или все еще более высокий уровень драйвера пытается отправить запрос ввода-вывода в базовый драйвер устройства.

File system drivers and legacy file system filter drivers also handle a required subset of system-defined IRP_MJ_XXX function codes, some with subordinate IRP_MN_XXX function codes. Дополнительные сведения о том, как обрабатывать эти irPs, см. в разделе "Основные коды функций IRP" для драйверов файловой системы и устаревших драйверов фильтров FS.

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

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.

For more information about IRPs, see Handling IRPs.