IOCTL_HID_GET_STRING IOCTL (hidport.h)

IOCTL_HID_GET_STRING请求获取 顶级集合的制造商 ID、产品 ID 或序列号。 检索到的字符串是以人可读格式结尾的 NULL 终止宽字符字符串。

有关 HIDClass 设备的常规信息,请参阅 HID 集合

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

IOCTL_HID_GET_STRING使用两个输入缓冲区。

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 指示 irp->UserBuffer 锁定输出缓冲区的大小(以字节为单位)。 如果输出缓冲区不够大,无法容纳整个以 NULL 结尾的嵌入字符串,则请求在输出缓冲区中不返回任何内容。 嵌入字符串中可能的最大字符数特定于设备。 对于 USB 设备,最大字符串长度为 126 宽字符(不包括终止 NULL 字符)。

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.Type3InputBuffer 包含复合值。 两个最重要的字节包含要检索的字符串的语言 ID。 两个最小有效字节包含以下三个常量值之一:

  • HID_STRING_ID_IMANUFACTURER
  • HID_STRING_ID_IPRODUCT
  • HID_STRING_ID_ISERIALNUMBER
HID 微型驱动程序确定这三个常量中的哪一个存在于输入缓冲区的下两个字节中,然后它必须从设备描述符中检索相应的字符串索引。 设备描述符信息存储在与设备关联的顶级集合的设备扩展中。

请务必不要将这三个常量与 ID 的实际字符串索引混淆。 这些常量表示可在其中找到相应字符串索引的设备描述符中的偏移量。

例如,HID_STRING_ID_IMANUFACTURER指示在找到制造商 ID 索引的设备描述符中的位置。 反过来,此索引充当制造商 ID 的可读形式的字符串描述符的偏移量。

输入缓冲区长度

OutputBufferLength 的大小和 Type3InputBuffer的大小。

输出缓冲区

HID 微型驱动程序使用请求的字符串(以 NULL 结尾的宽字符字符串)在 Irp->UserBuffer 填充缓冲区。

输出缓冲区长度

UserBuffer的大小。

状态块

对设备执行 I/O 的 HID 微型驱动程序设置以下 Irp->IoStatus字段:

  • 信息 设置为从设备传输的字节数。
  • 如果传输已完成且未出错,状态 设置为STATUS_SUCCESS。 否则,它设置为适当的 NTSTATUS 错误代码。
通过此 IOCTL 调用其他驱动程序的 HID 微型驱动程序将 I/O 执行到其设备,应确保状态块的 信息 字段正确,并且不会更改 状态 字段的内容。

要求

要求 价值
标头 hidport.h (包括 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