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


IOCTL_HID_GET_INDEXED_STRING IOCTL (hidclass.h)

Запрос IOCTL_HID_GET_INDEXED_STRING получает указанную внедренную строку из коллекции верхнего уровня. Полученная строка — это строка с широкими символами, заканчивающаяся NULL, в понятном для человека формате.

Общие сведения об устройствах HIDClass см. в разделе Коллекции HID.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

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)

См. также раздел

HidD_GetIndexedString

HidD_GetManufacturerString

HidD_GetPhysicalDescriptor

HidD_GetProductString

HidD_GetSerialNumberString

IOCTL_HID_GET_MANUFACTURER_STRING

IOCTL_HID_GET_PRODUCT_STRING

IOCTL_HID_GET_SERIALNUMBER_STRING