请求处理程序

如果驱动程序为 I/O 队列指定了顺序调度方法或并行 调度方法 ,则框架在每次准备好向驱动程序传递队列请求之一时都会调用驱动程序提供的回调函数。

对于每个 I/O 队列,驱动程序可以提供以下一个或多个回调函数,这些回调函数称为 请求处理程序

EvtIoRead
当队列中提供读取请求时,框架会调用 I/O 队列的 EvtIoRead 回调函数。

EvtIoWrite
当写入请求在队列中可用时,框架会调用 I/O 队列的 EvtIoWrite 回调函数。

EvtIoDeviceControl
当设备 I/O 控制请求在队列中可用时,框架会调用 I/O 队列的 EvtIoDeviceControl 回调函数。

EvtIoInternalDeviceControl
当队列中提供内部设备 I/O 控制请求时,框架会调用 I/O 队列的 EvtIoInternalDeviceControl 回调函数。

EvtIoDefault
如果驱动程序未提供关联的特定于请求类型的回调函数,则当任何请求可用时,框架会调用 I/O 队列的 EvtIoDefault 回调函数。

驱动程序在调用 WdfIoQueueCreate 为设备创建 I/O 队列时注册回调函数。

其中每个回调函数都接收两个输入参数:一个是框架传递给驱动程序的 I/O 请求句柄,一个是持有该请求的 I/O 队列的句柄。 回调函数可以通过调用 WdfIoQueueGetDevice 来确定目标设备。

框架在任意线程上下文中调用驱动程序的请求处理程序。 在任意线程上下文中执行时,驱动程序不应等待较长时间。 在某些情况下,驱动程序可能会使用内核调度程序对象作为同步机制。 有关驱动程序何时可以等待调度程序对象以及当无法等待时要执行的操作的信息,请参阅 内核调度程序对象简介