IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion 方法 (wudfusb.h)

[警告: UMDF 2 是最新版本的 UMDF,取代了 UMDF 1。 所有新的 UMDF 驱动程序都应使用 UMDF 2 编写。 未向 UMDF 1 添加新功能,并且较新版本的 Windows 10 上对 UMDF 1 的支持有限。 通用 Windows 驱动程序必须使用 UMDF 2。 有关详细信息,请参阅使用 UMDF 入门。]

驱动程序的 OnReaderCompletion 事件回调函数通知驱动程序连续读取器已成功完成读取请求。

语法

void OnReaderCompletion(
  [in] IWDFUsbTargetPipe *pPipe,
  [in] IWDFMemory        *pMemory,
  [in] SIZE_T            NumBytesTransferred,
  [in] PVOID             Context
);

参数

[in] pPipe

指向驱动程序已启用连续读取器的 USB 管道 的 IWDFUsbTargetPipe 接口的指针。

[in] pMemory

指向包含从 USB 管道读取的数据的读取缓冲区 的 IWDFMemory 接口的指针。

[in] NumBytesTransferred

读取缓冲区包含的字节数。

[in] Context

指向驱动程序提供的上下文信息的指针,该信息是驱动程序之前调用 IWDFUsbTargetPipe2::ConfigureContinuousReader 时提供的。

返回值

备注

若要注册 IUsbTargetPipeContinuousReaderCallbackReadComplete::OnReaderCompletion 回调函数,驱动程序必须在调用 IWDFUsbTargetPipe::ConfigureContinuousReader 时提供指向驱动程序 IUsbTargetPipeContinuousReaderCallbackReadlete 接口的指针。

如果驱动程序已为 USB 管道创建了连续读取器,则每次驱动程序的 I/O 目标成功完成读取请求时,框架都会调用驱动程序的 OnReaderCompletion 回调函数。 如果 I/O 目标未成功完成请求,框架将调用驱动程序的 IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure 回调函数。

若要访问包含从设备读取的数据的缓冲区,驱动程序可以调用 IWDFMemory::GetDataBuffer。 框架将数据写入缓冲区,该标头由 IWDFUsbTargetPipe2::ConfigureContinuousReaderHeaderLength 参数定义。 请注意, IWDFMemory::GetDataBuffer 返回的指针指向标头的开头,但 OnReaderCompletion 回调函数的 NumBytesTransferred 参数不包括标头的长度。

默认情况下,框架在 OnReaderCompletion 回调函数返回后删除缓冲区的内存对象。 但是,你可能希望内存对象在回调函数返回后保持有效。 例如,你可能希望驱动程序将内存对象的接口指针存储在框架管道对象的 上下文空间 中,以便驱动程序可以在回调函数返回后处理内存对象的内容。 若要延长内存对象的生存期,回调函数必须调用缓冲区的 IWDFMemory::AddRef 方法。 随后,驱动程序必须调用缓冲区的 IWDFMemory::Release 方法,以便框架可以删除对象。

框架根据以下规则同步对 OnReaderCompletionIUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure 回调函数的调用:

  • 对于单个 USB 管道,这些回调函数不会同时运行。
  • 如果驱动程序使用多个 OnReaderCompletionOnReaderFailure 回调函数为多个 USB 管道创建多个连续读取器,则多个回调函数可以同时运行。
  • 如果驱动程序在调用 IWDFUsbTargetPipe2::ConfigureContinuousReader (时指定了默认 NumPendingReads 值,或者指定了大于 1) 的任何 NumPendingReads 值,并且如果在 OnReaderCompletion 回调函数执行时读取请求完成,框架可以在回调函数返回之前再次调用 OnReaderCompletion 回调函数。
  • 框架不会将这些回调函数与任何其他回调函数同步。
当驱动程序调用 IWDFUsbTargetPipe2::ConfigureContinuousReader 时,它可以指定 IObjectCleanup::OnCleanup 回调函数。 框架将在 OnReaderCompletion 回调函数返回后尝试删除内存对象时调用该回调函数。

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

要求

要求
结束支持 在 UMDF 2.0 及更高版本中不可用。
目标平台 桌面
最低 UMDF 版本 1.9
标头 wudfusb.h (包括 Wudfusb.h)

另请参阅

IUsbTargetPipeContinuousReaderCallbackReadComplete

IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure