Получение предварительно подготовленных данных
В этой статье описывается, как приложения в пользовательском режиме и драйверы в режиме ядра получают предварительно подготовленные данные коллекции 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.