DispatchRead、DispatchWrite 和 DispatchReadWrite 例程

驱动程序的 DispatchReadDispatchWrite 例程分别处理 I/O 函数代码 为 IRP_MJ_READIRP_MJ_WRITE 的 I/O IRP。 或者,组合的 DispatchReadWrite 例程可以处理这两个 I/O 函数代码的 IRP。

可从中将数据传输到系统的设备的每个驱动程序都必须具有 DispatchRead 例程。 可将数据从系统传输到的设备的每个驱动程序都必须具有 DispatchWrite 例程。 任何在两个方向传输数据的驱动程序都可以具有组合的 DispatchReadWrite 例程。

较低级别的驱动程序异步处理 IRP_MJ_READIRP_MJ_WRITE 请求。 因此,最高级别驱动程序中的 DispatchRead 和/或 DispatchWrite 例程必须传递这些请求以供进一步处理,前提是该请求在该驱动程序的 I/O 堆栈位置 I/O IRP 中具有有效参数。

驱动程序是为缓冲 I/O 还是直接 I/O 设置其设备对象会影响其处理传输请求的方式。 具体而言,使用直接 I/O 执行 DMA 操作的驱动程序可能需要将大型传输请求拆分为一系列较小的传输操作,以满足 IRP_MJ_READIRP_MJ_WRITE 请求。 有关详细信息,请参阅 输入/输出技术

以下小节讨论了使用缓冲 I/O 和直接 I/O 的最低级别设备驱动程序以及分层在更高级别的驱动程序中 DispatchReadWrite 例程的一些设计和实现注意事项:

以异步方式处理传输

使用缓冲 I/O 执行 DispatchReadWrite

使用直接 I/O 执行 DispatchReadWrite

较高级驱动程序中的 DispatchReadWrite

读/写 Dispatch 例程摘要