以异步方式处理传输

除最高级别的驱动程序外,所有驱动程序都异步处理 IRP_MJ_READIRP_MJ_WRITE 请求。 即使是最高级别驱动程序中的 DispatchReadDispatchWrite 例程也不能等待较低级别的驱动程序完成异步读取或写入请求的处理;他们必须将此类请求传递给降低驱动程序并返回STATUS_PENDING。

同样,最低级别设备驱动程序的 DispatchReadWrite 例程必须将传输请求传递到处理设备 I/O 请求的其他驱动程序例程,然后返回STATUS_PENDING。

较高级别的驱动程序有时必须设置部分传输 IRP 并将其传递给较低的驱动程序。 仅当较低级别的驱动程序已完成部分传输请求时,较高级别的驱动程序才能完成原始读/写 IRP。

例如,SCSI 类驱动程序的 DispatchReadWrite 例程需要将超出基础 HBA 传输功能的大型传输请求拆分为一组部分传输请求。 类驱动程序必须在其部分传输 IRP 中设置参数,以便 SCSI 端口/微型端口驱动程序可以在单个 DMA 操作中满足每个部分传输请求。

使用 DMA 或 PIO 的其他设备驱动程序可能需要自行拆分大型传输请求。

有关使用 DMA 和 PIO 的详细信息,请参阅 输入/输出技术