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, запрос не возвращает ничего в выходном буфере.
Обработка мини-накопителя: 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).
Обработка minidriver. Irp-MdlAddress> указывает на буфер для получения полученной строки (строка с расширенными символами, заканчивающаяся NULL). Обратите внимание, что в отличие от большинства irp управления устройствами для мини-накопителей HID, этот IRP не использует буферизацию METHOD_NEITHER. В частности, его необходимо отличать от IOCTL_HID_GET_STRING, выходной буфер которого идентифицируется Irp-UserBuffer>.
Длина выходного буфера
Длина полученной строки (строка расширенных символов, заканчивающаяся NULL). Указанный буфер должен быть <= 4093 байта (2^12 –3).
Блок состояния
Драйвер класса HID задает следующие поля Irp-IoStatus>:
Для сведений задается количество байтов, передаваемых с устройства.
Состояние устанавливается в STATUS_SUCCESS, если передача выполнена без ошибок. В противном случае устанавливается соответствующий код ошибки NTSTATUS.
Требования
Требование | Значение |
---|---|
Заголовок | hidclass.h (включая Hidclass.h) |