获取预分析的数据

本部分介绍用户模式应用程序和内核模式驱动程序如何获取 HID 集合的已准备数据,该数据是描述集合的 HID 报表的不透明结构。

User-Mode应用程序

用户模式应用程序必须先获取集合的已准备数据,然后才能调用任何需要已准备数据的 HIDClass 支持例程。 应用程序应保留对集合的已准备数据的访问权限,只要它在设备上具有打开的文件。

在 HID 集合上打开文件后,应用程序HidD_GetPreparsedData调用 ,以在例程分配的缓冲区中返回集合的已准备数据。

当应用程序 HidD_FreePreparsedData 集合时,应用程序应调用 HidD_FreePreparsedData。

Kernel-Mode 驱动程序

内核模式驱动程序打开 HID 集合后,驱动程序将按照以下方式获取集合的已准备数据

  • 获取集合的已准备数据的长度

  • 获取集合的已准备数据

若要确定已准备数据的长度,驱动程序将使用IOCTL_HID_GET_COLLECTION_INFORMATION请求。请求返回HID_COLLECTION_INFORMATION 结构。 此 结构的 DescriptorSize 成员指定集合的已准备数据的大小(以字节为单位)。 驱动程序必须从至少具有此大小的非分页池中分配缓冲区,以保存准备的数据。

为准备的数据分配缓冲区后,驱动程序将使用 IOCTL_HID_GET_COLLECTION_DESCRIPTOR请求来获取 已准备的数据。

获取准备好的数据后,驱动程序可以将它与 HidP_Xxx HID 支持例程一起用于获取有关 HID 集合的功能的信息,以及从 HID 报表中提取控制数据。