EVT_WDF_USB_READERS_FAILED回调函数 (wdfusb.h)

[适用于 KMDF 和 UMDF]

驱动程序的 EvtUsbTargetPipeReadersFailed 事件回调函数通知驱动程序,连续读取器在处理读取请求时报告了错误。

语法

EVT_WDF_USB_READERS_FAILED EvtWdfUsbReadersFailed;

BOOLEAN EvtWdfUsbReadersFailed(
  [in] WDFUSBPIPE Pipe,
  [in] NTSTATUS Status,
  [in] USBD_STATUS UsbdStatus
)
{...}

参数

[in] Pipe

框架管道对象的句柄。

[in] Status

管道的 I/O 目标返回的 NTSTATUS 值

[in] UsbdStatus

管道的 I/O 目标返回的 USBD_STATUS类型状态值。

返回值

EvtUsbTargetPipeReadersFailed 事件回调函数返回一个布尔值,如果为 TRUE,则会导致框架重置 USB 管道,然后重启连续读取器。 如果此函数返回 FALSE,则框架不会重置设备或重启连续读取器。

注解

若要注册 EvtUsbTargetPipeReadersFailed 回调函数,驱动程序必须将函数的地址置于 WDF_USB_CONTINUOUS_READER_CONFIG 结构中。 有关何时添加此函数指针的信息,请参阅 WDF_USB_CONTINUOUS_READER_CONFIG_INIT 的“备注”部分。

如果驱动程序已为 USB 管道创建了连续读取器,则如果驱动程序的 I/O 目标在完成读取请求时报告错误,框架将调用驱动程序的 EvtUsbTargetPipeReadersFailed 回调函数。 (如果 I/O 目标成功完成请求,框架将调用驱动程序的 EvtUsbTargetPipeReadComplete 回调函数.)

在框架调用驱动程序的 EvtUsbTargetPipeReadersFailed 回调函数之前,它会尝试取消所有正在进行的读取请求。 当框架调用 EvtUsbTargetPipeReadersFailed 回调函数时,没有读取请求正在进行中。 在 EvtUsbTargetPipeReadersFailed 回调函数返回之前,框架不会将任何其他读取请求排队。

有关框架如何将 对 EvtUsbTargetPipeReadersFailed 回调函数的调用与其他回调函数的调用同步的信息,请参阅 EvtUsbTargetPipeReadComplete 的“备注”部分。

EvtUsbTargetPipeReadersFailed 回调函数不得调用 WdfIoTargetStop 来停止连续读取器的 USB 目标。 (事实上,在 EvtUsbTargetPipeReadersFailed 回调函数中调用 WdfIoTargetStop 会导致死锁。) 此外,回调函数不得调用 WdfIoTargetStart 来重启连续读取器。 相反,如果回调函数返回 TRUE,框架将重启读取器。 有关何时为连续读取器调用 WdfIoTargetStartWdfIoTargetStop 的详细信息,请参阅 使用 USB 管道

如果驱动程序不提供 EvtUsbTargetPipeReadersFailed 回调函数,并且驱动程序的 I/O 目标报告错误,框架将重置 USB 管道并重启连续读取器。

有关 EvtUsbTargetPipeReadersFailed 回调函数和 USB I/O 目标的详细信息,请参阅 USB I/O 目标

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfusb.h (包括 Wdf.h)
IRQL PASSIVE_LEVEL

另请参阅

EvtUsbTargetPipeReadComplete

WDF_USB_CONTINUOUS_READER_CONFIG