使用 IoCompletion 例程
在特定于 IRP 的基础上监视较低级别驱动程序如何执行特定请求的更高级别的驱动程序可以具有一个或多个 IoCompletion 例程。 分配 IRP 以将请求发送到较低级别的驱动程序的较高级别驱动程序必须具有 IoCompletion 例程。
最高级别或中间驱动程序的 DispatchRead 或 DispatchWrite 例程最有可能为 IRP 设置 IoCompletion 例程,因为较低级别的驱动程序必须异步处理传输请求。
驱动程序堆栈中的最低级别驱动程序无法注册 IoCompletion 例程。
驱动程序通常不会为与同步 I/O 操作关联的 IRP 注册 IoCompletion 例程。 例如,更高级别的驱动程序的 DispatchDeviceControl 例程可以使用 IoBuildDeviceIoControlRequest 分配 IRP。 在这种情况下,调度例程通常不注册 IoCompletion 例程,因为设备控制请求通常是同步处理的。 相反,驱动程序可以分配和初始化事件对象,当它在驱动程序分配的 IRP 上发送事件时,其 DispatchDeviceControl 例程可以等待事件初始化。 通常,出于相同的原因,较高级别的驱动程序不会为使用 IoBuildSynchronousFsdRequest 分配的 IRP 注册 IoCompletion 例程。
本节包含下列主题: