IOCTL_HID_GET_STRING IOCTL (hidport.h)

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

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

Основной код

IRP_MJ_DEVICE_CONTROL

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

IOCTL_HID_GET_STRING использует два входных буфера.

Parameters.DeviceIoControl.OutputBufferLength в расположении стека ввода-вывода iRP указывает размер в байтах заблокированного выходного буфера в Irp->UserBuffer. Если выходной буфер недостаточно велик для хранения всей встроенной строки, завершаемой значением NULL, запрос возвращает ничего в выходном буфере. Максимально возможное количество символов в внедренной строке — это конкретное устройство. Для USB-устройств максимальная длина строки составляет 126 широких символов (не включая завершающий символ NULL).

Parameters.DeviceIoControl.Type3InputBuffer в расположении стека ввода-вывода iRP содержит составное значение. Два наиболее значимых байта содержат идентификатор языка строки, которая должна быть получена. Два наименее значимых байта содержат одно из следующих трех констант:

  • HID_STRING_ID_IMANUFACTURER
  • HID_STRING_ID_IPRODUCT
  • HID_STRING_ID_ISERIALNUMBER
Мини-driver HID определяет, какие из этих трех констант присутствуют в нижнем двух байтах входного буфера, а затем он должен получить соответствующий строковый индекс из дескриптора устройства. Сведения о дескрипторе устройства хранятся в расширении коллекции верхнего уровня, связанной с устройством.

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

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

Длина входного буфера

Размер OutputBufferLength и размер Type3InputBuffer.

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

Мини-driver HID заполняет буфер по Irp->UserBuffer запрошенной строкой (строкой, завершаемой значением NULL).

Длина выходного буфера

Размер UserBuffer.

Блок состояния

Мини-накопители HID, которые выполняют ввод-вывод на устройство, задают следующие поля Irp->IoStatus:

  • сведения задано число байтов, передаваемых с устройства.
  • состояние имеет значение STATUS_SUCCESS, если передача завершена без ошибок. В противном случае для него задан соответствующий код ошибки NTSTATUS.
Мини-накопители HID, которые вызывают другие драйверы с этим IOCTL для выполнения ввода-вывода на устройство, должны убедиться, что поле Information блока состояния правильно и не изменяет содержимое поля состояния.

Требования

Требование Ценность
заголовка hidport.h (include Hidport.h)

См. также

HidD_GetIndexedString

HidD_GetManufacturerString

HidD_GetProductString

HidD_GetSerialNumberString

IOCTL_HID_GET_INDEXED_STRING

IOCTL_HID_GET_MANUFACTURER_STRING

IOCTL_HID_GET_PRODUCT_STRING

IOCTL_HID_GET_SERIALNUMBER_STRING