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

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

[in] NumBytesTransferred

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

[in] Context

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

返回值

没有

言论

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

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

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

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

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

  • 这些回调函数不会为单个 USB 管道同时运行。
  • 如果驱动程序为多个 USB 管道创建多个连续读取器,并且有多个 OnReaderCompletionOnReaderFailure 回调函数,则多个回调函数可以同时运行。
  • 如果驱动程序在调用 IWDFUsbTargetPipe2::ConfigureContinuousReader 时指定了默认 NumPendingReads 值(或者如果它指定了任何 NumPendingRead 大于 1 的值,如果在执行 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