IOCTL_HID_GET_INDEXED_STRING IOCTL (hidclass.h)
Запрос IOCTL_HID_GET_INDEXED_STRING получает указанную внедренную строку из коллекции верхнего уровня. Полученная строка — это строка, завершаемая значением NULL, широкой символьной строкой в формате, доступном для чтения человеком.
Общие сведения об устройствах HIDClass см. в коллекций HID.
Основной код
Входной буфер
Parameters.DeviceIoControl.InputBufferLength в расположении стека ввода-вывода iRP указывает размер входного буфера в байтах в расположении, на которое указывает Irp->AssociatedIrp.SystemBuffer.
Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода iRP указывает размер в байтах выходного буфера. Если выходной буфер недостаточно велик для хранения всей встроенной строки, завершаемой значением NULL, запрос возвращает ничего в выходном буфере.
обработке мини-driver: IOCTL_HID_GET_INDEXED_STRING использует два входных буфера.
Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода iRP указывает размер в байтах выходного буфера в расположении, на которое указывает Irp->MdlAddress. Если выходной буфер недостаточно велик для хранения всей встроенной строки, завершаемой значением NULL, запрос возвращает ничего в выходном буфере. Максимально возможное количество символов в внедренной строке — это конкретное устройство. Для USB-устройств максимальная длина строки составляет 126 широких символов (не включая завершающий символ NULL).
Parameters.DeviceIoControl.Type3InputBuffer содержит значение INT, описывающее извлекаемую строку. Наиболее значимые два байта значения INT содержат идентификатор языка (например, значение 1033 указывает на английский язык). Наименее значимые два байта значения INT содержат строковый индекс.
Длина входного буфера
Parameters.DeviceIoControl.InputBufferLength должен быть >= sizeof(ULONG), и он должен содержать индекс строки для извлечения.
Для Parameters.DeviceIoControl.OutputBufferLengthмаксимально возможное количество символов в внедренной строке зависит от устройства. Для USB-устройств максимальная длина строки составляет 126 широких символов (не включая завершающий символ NULL).
Выходной буфер
Irp->MdlAddress указывает на буфер, чтобы получить полученную строку (строку, завершаемую значением NULL).
обработке мини-driver: Irp->MdlAddress указывает на буфер, чтобы получить полученную строку (строку, завершаемую значением NULL). Обратите внимание, что в отличие от большинства ip-адресов управления устройствами для мини-drivers HID, этот IRP не использует METHOD_NEITHER буферизации. В частности, он должен отличаться от IOCTL_HID_GET_STRING, выходной буфер которого определяется Irp->UserBuffer.
Длина выходного буфера
Длина полученной строки (строка, завершаемая значением NULL). Предоставленный буфер должен быть <= 4093 байта (2^12 – 3).
Блок состояния
Драйвер класса HID задает следующие поля Irp->IoStatus:
сведения задано число байтов, передаваемых с устройства.
состояние имеет значение STATUS_SUCCESS, если передача завершена без ошибок. В противном случае для него задан соответствующий код ошибки NTSTATUS.
Требования
Требование | Ценность |
---|---|
заголовка | hidclass.h (include Hidclass.h) |