Поделиться через


Получение предварительно подготовленных данных

В этой статье описывается, как приложения в пользовательском режиме и драйверы в режиме ядра получают предварительно подготовленные данные коллекции HID, которая представляет собой непрозрачную структуру, описывающую отчеты HID коллекции.

Приложение в режиме пользователя

Приложение в пользовательском режиме должно получить предварительно подготовленные данные коллекции перед вызовом любой из подпрограмм поддержки HIDClass, требующих предварительно подготовленных данных. Приложение должно хранить доступ к предварительно подготовленным данным коллекции, пока он имеет открытый файл на устройстве.

После открытия файла в коллекции HID приложение вызывает HidD_GetPreparsedData для возврата предварительно подготовленных данных коллекции в выделенный подпрограммой буфере.

Приложения должны вызывать HidD_FreePreparsedData , если приложению больше не требуется доступ к коллекции.

Драйвер режима ядра

После того как драйвер в режиме ядра открывает коллекцию HID, драйвер получает предварительно подготовленные данные коллекции следующим образом:

  • Получает длину предварительно подготовленных данных коллекции.

  • Получает предварительно подготовленные данные коллекции

Чтобы определить длину предварительно подготовленных данных, драйвер использует запрос IOCTL_HID_GET_COLLECTION_INFORMATION. Этот запрос возвращает структуру HID_COLLECTION_INFORMATION . Элемент DescriptorSize этой структуры указывает размер предварительно подготовленных данных коллекции в байтах. Драйвер должен выделить буфер из непагрегированного пула по крайней мере этого размера, чтобы хранить предварительно подготовленные данные.

После выделения буфера для предварительно подготовленных данных драйвер использует запрос IOCTL_HID_GET_COLLECTION_DESCRIPTOR для получения предварительно подготовленных данных.

Получив предварительно подготовленные данные, драйвер может использовать его с подпрограммами поддержки ***HidP_**XXX HID для получения сведений о возможностях коллекции HID и извлечения данных управления из отчетов HID.