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::ConfigureContinuousReader 的 HeaderLength 参数定义。 请注意, IWDFMemory::GetDataBuffer 返回的指针指向标头的开头,但 OnReaderCompletion 回调函数的 NumBytesTransferred 参数不包括标头的长度。
默认情况下,框架在 OnReaderCompletion 回调函数返回后删除缓冲区的内存对象。 但是,你可能希望内存对象在回调函数返回后保持有效。 例如,你可能希望驱动程序将内存对象的接口指针存储在框架管道对象的 上下文空间 中,以便驱动程序可以在回调函数返回后处理内存对象的内容。 若要延长内存对象的生存期,回调函数必须调用缓冲区的 IWDFMemory::AddRef 方法。 随后,驱动程序必须调用缓冲区的 IWDFMemory::Release 方法,以便框架可以删除对象。
框架根据以下规则同步对 OnReaderCompletion 和 IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure 回调函数的调用:
- 对于单个 USB 管道,这些回调函数不会同时运行。
- 如果驱动程序使用多个 OnReaderCompletion 和 OnReaderFailure 回调函数为多个 USB 管道创建多个连续读取器,则多个回调函数可以同时运行。
- 如果驱动程序在调用 IWDFUsbTargetPipe2::ConfigureContinuousReader (时指定了默认的 NumPendingReads 值,或者指定了大于 1) 的任何 NumPendingReads 值,并且如果在 OnReaderCompletion 回调函数执行时读取请求完成,框架可以在回调函数返回之前再次调用 OnReaderCompletion 回调函数。
- 框架不会将这些回调函数与任何其他回调函数同步。
有关 OnReaderCompletion 回调函数和 USB I/O 目标的详细信息,请参阅 处理 USB I/O 目标。
要求
要求 | 值 |
---|---|
结束支持 | 在 UMDF 2.0 及更高版本中不可用。 |
目标平台 | 桌面 |
最低 UMDF 版本 | 1.9 |
标头 | wudfusb.h (包括 Wudfusb.h) |
另请参阅
IUsbTargetPipeContinuousReaderCallbackReadComplete
IUsbTargetPipeContinuousReaderCallbackReadersFailed::OnReaderFailure