IOCTL_HID_GET_STRING IOCTL (hidport.h)
IOCTL_HID_GET_STRING请求获取 顶级集合的制造商 ID、产品 ID 或序列号。 检索到的字符串是以 NULL 结尾的宽字符串,采用用户可读的格式。
有关 HIDClass 设备的常规信息,请参阅 HID 集合。
主要代码
输入缓冲区
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
请务必不要将这三个常量与 ID 的实际字符串索引混淆。 这些常量表示设备描述符中的偏移量,可在其中找到相应的字符串索引。
例如,HID_STRING_ID_IMANUFACTURER指示设备描述符中找到制造商 ID 索引的位置。 而此索引又充当制造商 ID 的可读形式的字符串描述符的偏移量。
输入缓冲区长度
OutputBufferLength 的大小和 Type3InputBuffer 的大小。
输出缓冲区
HID 微型驱动程序使用请求的字符串 (以 NULL 结尾的宽字符串) 填充 Irp-UserBuffer> 的缓冲区。
输出缓冲区长度
UserBuffer 的大小。
状态块
对设备执行 I/O 的 HID 微型驱动程序设置 Irp-IoStatus> 的以下字段:
- 信息 设置为从设备传输的字节数。
- 如果传输完成且未出错,则状态设置为STATUS_SUCCESS。 否则,它将设置为相应的 NTSTATUS 错误代码。
要求
要求 | 值 |
---|---|
Header | hidport.h (包括 Hidport.h) |