异步发送 I/O 请求

必须先设置请求的格式,然后才能将 I/O 请求异步发送到 I/O 目标。 下表列出了驱动程序可以调用以格式化 I/O 请求的 I/O 目标对象方法。

方法 目的

WdfIoTargetFormatRequestForRead

设置读取请求的格式

WdfIoTargetFormatRequestForWrite

设置写入请求的格式

WdfIoTargetFormatRequestForIoctl

设置设备控制请求的格式

WdfIoTargetFormatRequestForInternalIoctl

设置内部设备控制请求的格式

WdfIoTargetFormatRequestForInternalIoctlOthers

设置非标准内部设备控制请求的格式

若要异步发送 I/O 请求,驱动程序必须:

  1. 设置请求的格式。

    使用上表中列出的方法之一设置请求的格式。 有关如何使用这些方法的详细信息,请参阅方法的参考页。

  2. 注册 CompletionRoutine 回调函数。

    如果以异步方式发送请求,通常希望框架在另一个驱动程序完成每个请求时通知驱动程序。 驱动程序应定义 CompletionRoutine 回调函数,并通过调用 WdfRequestSetCompletionRoutine 对其进行注册。 有关详细信息,请参阅 完成 I/O 请求

  3. 发送请求。

    在驱动程序格式化请求并注册 CompletionRoutine 回调函数后,驱动程序必须调用 WdfRequestSend。 使用此方法可以同步或异步发送请求,具体取决于 RequestOptions 参数中设置的标志。 有关同步发送 I/O 请求的更简单方法,请参阅 以同步方式发送 I/O 请求。 有关如何获取异步请求或通过调用 WdfRequestSend 发送的任何请求的完成状态的信息,请参阅 完成 I/O 请求

调用 WdfRequestSend 以发送 I/O 请求的驱动程序稍后可以尝试取消该请求。 有关详细信息,请参阅 取消 I/O 请求

某些驱动程序可能会通过为每个请求多次调用 WdfRequestSend 来向多个设备发送单个 I/O 请求,从而发送到多个 I/O 目标。 这些驱动程序必须在每次调用 WdfRequestSend 之前调用 WdfRequestChangeTarget,然后再调用第一个驱动程序,以验证请求是否可以发送到下一个 I/O 目标。