WdfIoTargetPurge 函数 (wdfiotarget.h)

[适用于 KMDF 和 UMDF]

WdfIoTargetPurge 方法取消排队到本地、远程或专用 I/O 目标的所有 I/O 请求,并阻止任何新的 I/O 请求排队。 方法还尝试取消已离开 I/O 目标的队列并输入较低驱动程序的 I/O 请求。

语法

void WdfIoTargetPurge(
  [in] WDFIOTARGET                   IoTarget,
  [in] WDF_IO_TARGET_PURGE_IO_ACTION Action
);

参数

[in] IoTarget

本地或远程 I/O 目标对象的句柄,该对象是从先前调用 WdfDeviceGetIoTargetWdfIoTargetCreate 获取的,或者从专用 I/O 目标(如 WdfUsbTargetPipeGetIoTarget)提供的方法获取的。

[in] Action

一个WDF_IO_TARGET_PURGE_IO_ACTION类型的值,该值指示框架是否应等待从 WdfIoTargetPurge 返回,直到所有传递的请求都完成或取消。

返回值

备注

如果驱动程序提供无效的对象句柄,则会发生 bug 检查。

如果驱动程序之前已调用 WdfUsbTargetPipeConfigContinuousReader,则必须在 IRQL = PASSIVE_LEVEL调用 WdfIoTargetPurge 。 如果驱动程序尚未调用 WdfUsbTargetPipeConfigContinuousReader,并且 WdfIoTargetPurgeAction 参数为 WdfIoTargetPurgeIo,则可以在 IRQL <= DISPATCH_LEVEL调用 WdfIoTargetPurge。 否则,必须在 IRQL = PASSIVE_LEVEL调用 WdfIoTargetPurge

若要使 WdfIoTargetPurge 成为同步调用,驱动程序可以设置 Action 参数的 WdfIoTargetPurgeIoAndWait 值。 在这种情况下, WdfIoTargetPurge 将等待返回,直到所有传递的请求都完成或取消。

驱动程序调用 WdfIoTargetPurge 后,它仍然可以通过在请求的WDF_REQUEST_SEND_OPTIONS结构中设置 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 标志来向目标发送 请求 。 例如,驱动程序可能会在驱动程序调用 WdfIoTargetPurge 后,向设备发送请求,例如重置 USB 管道的请求 (请参阅 WdfUsbTargetPipeResetSynchronously) 。

当驱动程序调用 WdfIoTargetPurge 时,框架不会尝试取消或等待以前使用 WDF_REQUEST_SEND_OPTION_IGNORE_TARGET_STATE 标志或请求WDF_REQUEST_SEND_OPTIONS结构中的 WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET 标志发送到目标的 I /O 请求。

驱动程序清除 I/O 队列后,可以通过调用 WdfIoTargetStart 来重启队列。

驱动程序必须同步调用 WdfIoTargetStartWdfIoTargetStopWdfIoTargetPurge 。 驱动程序调用其中一个函数后,在上一次调用返回之前不得调用任何其他函数。

驱动程序可以多次调用 WdfIoTargetPurge ,而无需调用 WdfIoTargetStart。 例如,驱动程序可能会执行以下操作:

  1. 调用 WdfIoTargetPurge 并指定 操作WdfIoTargetPurgeIo
  2. 确定目标是否应继续处理 I/O 请求。
  3. 如果目标应恢复,请调用 WdfIoTargetStart。 否则,请再次调用 WdfIoTargetPurge,其操作值为 WdfIoTargetPurgeIoAndWait

有关 I/O 目标状态的详细信息,请参阅 控制常规 I/O 目标的状态

有关 I/O 目标的详细信息,请参阅 使用 I/O 目标

示例

下面的代码示例演示了如果驱动程序使用 USB 管道的连续读取器, EvtDeviceD0Exit 回调函数如何调用 WdfIoTargetPurge

NTSTATUS
MyEvtDeviceD0Exit(
    IN  WDFDEVICE Device,
    IN  WDF_POWER_DEVICE_STATE TargetState
)
{
    PDEVICE_CONTEXT  pDeviceContext;
    pDeviceContext = GetMyDeviceContext(Device);

    WdfIoTargetPurge(
                    WdfUsbTargetPipeGetIoTarget(pDeviceContext->InterruptPipe),
                    WdfIoTargetPurgeIoAndWait
                    );

    return STATUS_SUCCESS;
}

要求

要求
目标平台 通用
最低 KMDF 版本 1.11
最低 UMDF 版本 2.0
标头 wdfiotarget.h (包括 Wdf.h)
Library Wdf01000.sys (KMDF) ;WUDFx02000.dll (UMDF)
IRQL 请参见“备注”部分。
DDI 符合性规则 DriverCreate (kmdf)

另请参阅

WDF_IO_TARGET_PURGE_IO_ACTION

WdfIoTargetCreate

WdfIoTargetGetState

WdfIoTargetStart

WdfIoTargetStop