WdfUsbTargetPipeResetSynchronously 函数 (wdfusb.h)

[适用于 KMDF 和 UMDF]

WdfUsbTargetPipeResetSynchronously 方法会生成重置请求并将其同步发送到指定的 USB 管道。

语法

NTSTATUS WdfUsbTargetPipeResetSynchronously(
  [in]           WDFUSBPIPE                Pipe,
  [in, optional] WDFREQUEST                Request,
  [in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);

参数

[in] Pipe

通过调用 WdfUsbInterfaceGetConfiguredPipe获取的框架管道对象的句柄。

[in, optional] Request

框架请求对象的句柄。 此参数是可选的,可以 NULL。 有关详细信息,请参阅以下“备注”部分。

[in, optional] RequestOptions

指向调用方分配 WDF_REQUEST_SEND_OPTIONS 结构的指针,该结构指定请求的选项。 此指针是可选的,可以 NULL。 有关详细信息,请参阅以下“备注”部分。

返回值

WdfUsbTargetPipeResetSynchronously 如果操作成功,则返回 USB I/O 目标的完成状态值。 否则,此方法可以返回以下值之一:

返回代码 描述
STATUS_INFO_LENGTH_MISMATCH
指定的 RequestOptions 参数 WDF_REQUEST_SEND_OPTIONS 结构的大小不正确。
STATUS_INVALID_PARAMETER
检测到无效参数。
STATUS_INSUFFICIENT_RESOURCES
内存不足。
STATUS_INVALID_DEVICE_REQUEST
调用方的 IRQL 未PASSIVE_LEVEL,或者指定 请求 参数的 I/O 请求已排队到 I/O 目标。
STATUS_IO_TIMEOUT
驱动程序提供了超时值,请求未在分配的时间内完成。
STATUS_REQUEST_NOT_ACCEPTED
Request 参数表示的 I/O 请求数据包(IRP),不提供足够的 IO_STACK_LOCATION 结构,使驱动程序能够转发请求。
 

此方法还可以返回其他 NTSTATUS 值。

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

言论

使用 WdfUsbTargetPipeResetSynchronously 方法同步发送 USB 重置请求。 若要异步发送此类请求,请使用 WdfUsbTargetPipeFormatRequestForReset,后跟 WdfRequestSend

在框架重置 I/O 目标的 USB 管道之前,它会取消保留在 I/O 目标队列中的所有 I/O 请求。 在 WdfUsbTargetPipeResetSynchronously 返回之前,驱动程序不得向 I/O 目标发送其他 I/O 请求。

驱动程序必须先调用 WdfIoTargetStop,然后才能调用 WdfUsbTargetPipeResetSynchronouslyWdfUsbTargetPipeResetSynchronously 返回后,驱动程序可以调用 WdfIoTargetStart

当驱动程序调用 WdfUsbTargetPipeResetSynchronously时,框架会将 URB_FUNCTION_RESET_PIPE 请求发送到 I/O 目标。 有关重置 USB 管道的详细信息,请参阅 USB 规范。

WdfUsbTargetPipeResetSynchronously 方法在请求完成之前不会返回,除非驱动程序在 WDF_REQUEST_SEND_OPTIONS 结构中提供了 RequestOptions 参数指向的超时值,或者除非检测到错误。

可以转发驱动程序在 I/O 队列中收到的 I/O 请求,也可以创建并发送新请求。

若要转发驱动程序在 I/O 队列中收到的 I/O 请求,请为 WdfUsbTargetPipeResetSynchronously 方法的 Request 参数指定收到的请求的句柄。

若要创建和发送新请求,请为 请求 参数提供 NULL 请求句柄,或创建新的请求对象并提供其句柄:

  • 如果提供 NULL 请求句柄,框架将使用内部请求对象。 此方法易于使用,但驱动程序无法取消请求。
  • 如果调用 WdfRequestCreate 来创建一个或多个请求对象,可以通过调用 WdfRequestReuse来重复使用这些请求对象。 通过此方法,驱动程序的 EvtDriverDeviceAdd 回调函数可以预分配设备的请求对象。 此外,另一个驱动程序线程可以根据需要调用 WdfRequestCancelSentRequest 以取消请求。
驱动程序可以指定非NULLRequestOptions 参数,无论驱动程序提供非NULL 还是 NULLRequest 参数。 例如,可以使用 RequestOptions 参数指定超时值。

有关在 I/O 请求完成后获取状态信息的信息,请参阅 获取完成信息

有关 WdfUsbTargetPipeResetSynchronously 方法和 USB I/O 目标的详细信息,请参阅 USB I/O 目标

例子

下面的代码示例将重置请求发送到 USB 设备的管道。

NTSTATUS  status;

status = WdfUsbTargetPipeResetSynchronously(
                                            Pipe, 
                                            WDF_NO_HANDLE,
                                            NULL
                                            );

要求

要求 价值
目标平台 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfusb.h (包括 Wdfusb.h)
Wdf01000.sys(KMDF):WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI 符合性规则 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf),KmdfIrqlExplicit(kmdf),请求ForUrbXrb(kmdf)UsbKmdfIrql(kmdf)UsbKmdfIrql2(kmdf),UsbKmdfIrqlExplicit(kmdf)

另请参阅

WdfObjectDereference

WdfRequestCancelSentRequest

WdfRequestSend

WdfUsbTargetPipeAbortSynchronously