获取预先分析的数据

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

User-Mode 应用程序

用户模式应用程序在调用需要预分析数据的任何 HIDClass 支持例程 之前,必须获取集合的预分析数据。 只要应用程序在设备上具有打开的文件,应用程序就应保留对集合的预分析数据的访问权限。

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

当应用程序不再需要访问集合时,应用程序应调用 HidD_FreePreparsedData

Kernel-Mode 驱动程序

内核模式驱动程序打开 HID 集合后,驱动程序将按以下方式获取集合的 预分析数据

  • 获取集合的预分析数据的长度

  • 获取集合的预分析数据

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

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

获取预先分析的数据后,驱动程序可以将其与 **HidP_**Xxx HID 支持例程一起使用,以获取有关 HID 集合功能的信息,并从 HID 报表中提取控制数据。