IOCTL_HID_GET_INDEXED_STRING IOCTL (hidclass.h)

IOCTL_HID_GET_INDEXED_STRING请求从 顶级集合获取指定的嵌入字符串。 检索到的字符串是一个以 NULL 结尾的宽字符串,采用可读的格式。

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

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示 Irp-AssociatedIrp.SystemBuffer> 指向的位置的输入缓冲区的大小(以字节为单位)。

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 指示输出缓冲区的大小(以字节为单位)。 如果输出缓冲区的大小不足以容纳整个以 NULL 结尾的嵌入字符串,则请求不会在输出缓冲区中返回任何内容。

微型驱动程序处理:IOCTL_HID_GET_INDEXED_STRING使用两个输入缓冲区。

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

Parameters.DeviceIoControl.Type3InputBuffer 包含描述要检索的字符串的 INT 值。 例如,INT 值的最大有效两个字节包含语言 ID (值 1033 表示英语) 。 INT 值的最小两个有效字节包含字符串索引。

输入缓冲区长度

Parameters.DeviceIoControl.InputBufferLength 必须 >= sizeof (ULONG) 并且它应包含要检索的字符串的索引。

对于 Parameters.DeviceIoControl.OutputBufferLength,嵌入字符串中的最大可能字符数是特定于设备的。 对于 USB 设备,最大字符串长度为 126 个宽字符, (不包括终止 NULL 字符) 。

输出缓冲区

Irp->MdlAddress 指向缓冲区以接收检索到的字符串 (以 NULL 结尾的宽字符串) 。

微型驱动程序处理Irp-MdlAddress> 指向缓冲区,以接收检索到的字符串 (以 NULL 结尾的宽字符串) 。 请注意,与 HID 微型驱动程序的大多数设备控制 IRP 不同,此 IRP 不使用METHOD_NEITHER缓冲。 具体而言,必须将其与输出缓冲区由 Irp-UserBuffer> 标识的IOCTL_HID_GET_STRING区区分开来。

输出缓冲区长度

检索到的字符串的长度 (以 NULL 结尾的宽字符串) 。 提供的缓冲区必须 <= 4093 字节 (2^12 – 3) 。

状态块

HID 类驱动程序设置 Irp-IoStatus> 的以下字段:

  • 信息 设置为从设备传输的字节数。

  • 如果传输未出错,则状态设置为STATUS_SUCCESS。 否则,它会设置为相应的 NTSTATUS 错误代码。

要求

要求
Header 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