[警告: 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 方法,以便框架可以删除该对象。
该框架根据以下规则同步对 OnReaderCompletion 和 IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure 回调函数的调用:
- 这些回调函数不会为单个 USB 管道同时运行。
- 如果驱动程序为多个 USB 管道创建多个连续读取器,并且有多个 OnReaderCompletion,OnReaderFailure 回调函数,则多个回调函数可以同时运行。
- 如果驱动程序在调用 IWDFUsbTargetPipe2::ConfigureContinuousReader 时指定了默认 NumPendingReads 值(或者如果它指定了任何 NumPendingRead 大于 1 的值,如果在执行 OnReaderCompletion 回调函数时读取请求完成,则框架可以在回调函数返回之前再次调用 OnReaderCompletion 回调函数。
- 框架不会将这些回调函数与任何其他回调函数同步。
有关 OnReaderCompletion 回调函数和 USB I/O 目标的详细信息,请参阅 处理 USB I/O 目标。
要求
要求 | 价值 |
---|---|
终止支持 | 在 UMDF 2.0 及更高版本中不可用。 |
目标平台 | 桌面 |
最低 UMDF 版本 | 1.9 |
标头 | wudfusb.h (包括 Wudfusb.h) |
另请参阅
IUsbTargetPipeContinuousReaderCallbackReadComplete
IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure