IRP 主要函数代码

每个 IRP的特定于驱动程序的 I/O 堆栈位置 (IO_STACK_LOCATION) 都包含一个主要函数代码 (IRP_MJ_XXX) ,该代码告知驱动程序它或基础设备驱动程序应执行哪些操作以满足 I/O 请求。 每个内核模式驱动程序必须为它必须支持的主要函数代码提供调度例程。

驱动程序针对给定的 IRP_MJ_XXX 代码执行的特定操作在某种程度上依赖于基础设备,尤其是对于 IRP_MJ_DEVICE_CONTROL 和 IRP_MJ_INTERNAL_DEVICE_CONTROL 请求。 例如,发送到键盘驱动程序的请求与发送到磁盘驱动程序的请求有些不同。 但是,I/O 管理器为每个系统定义的主要函数代码定义参数和 I/O 堆栈位置内容。

每个较高级别的驱动程序必须在 IRP 中为下一级别驱动程序设置适当的 I/O 堆栈位置,并调用 IoCallDriver(使用每个输入 IRP)或驱动程序创建的 IRP ((如果更高级别的驱动程序保留到输入 IRP) )。 因此,每个中间驱动程序必须为基础设备驱动程序处理的每个主要函数代码提供调度例程。 否则,每当应用程序或更高级别的驱动程序尝试将 I/O 请求向下发送到基础设备驱动程序时,新的中间驱动程序就会"中断链"。

文件系统驱动程序还处理系统定义的 IRP_MJ_XXX 函数代码的必需子集,其中一些IRP_MN_XXX 函数代码。

驱动程序处理使用以下部分或全部主要函数代码设置的 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 中特定于函数的参数。

有关 IRP 详细信息,请参阅 处理 IRPs