IOCTL_HID_GET_INDEXED_STRING IOCTL (hidclass.h)
IOCTL_HID_GET_INDEXED_STRING请求从 顶级集合获取指定的嵌入字符串。 检索到的字符串是以人可读格式结尾的 NULL 终止宽字符字符串。
有关 HIDClass 设备的常规信息,请参阅 HID 集合。
主要代码
输入缓冲区
IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示 Irp->AssociatedIrp.SystemBuffer指向的位置输入缓冲区的大小(以字节为单位)。
参数.DeviceIoControl.OutputBufferLength IRP 的 I/O 堆栈位置指示输出缓冲区的大小(以字节为单位)。 如果输出缓冲区不够大,无法容纳整个以 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 错误代码。
要求
要求 | 价值 |
---|---|
标头 | hidclass.h (include Hidclass.h) |