DispatchRead、DispatchWrite 和 DispatchReadWrite 例程

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

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

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

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

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

异步处理数据传输

使用缓冲 I/O 执行 DispatchReadWrite

使用直接 I/O 执行 DispatchReadWrite

Higher-Level 驱动程序中的 DispatchReadWrite

读/写调度例程摘要