IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME I/O 请求查询总线驱动程序,以获取 USB 主机控制器的设备名称。
IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME 是内核模式 I/O 控制请求。 此请求面向 USB 中心 PDO。 此请求必须在PASSIVE_LEVEL的 IRQL 发送。
主要代码
IRP_MJ_INTERNAL_DEVICE_CONTROL
输入缓冲区
Parameters.Others.Argument1 应该是指向 USB_HUB_NAME 结构的指针,该结构将用主机控制器的名称填充。
输入缓冲区长度
Parameters.Others.Argument2 应该是一个 ULONG,用于指定 Parameters.Others.Argument1中的缓冲区长度(以字节为单位)。
输出缓冲区
总线驱动程序将使用主机控制器设备名称填充 Parameters.Others.Argument1 指向的缓冲区。
输出缓冲区长度
仅填充 Parameters.Others.Argument2中指定的长度。
状态块
总线或端口驱动程序 Irp->IoStatus.Status 设置为STATUS_SUCCESS或适当的错误状态。
言论
调用方必须提供足够大的缓冲区来容纳 USB_HUB_NAME 结构。 Parameters.Others.Argument2 值指示该缓冲区的大小。 成功完成后,USB_HUB_NAME 的 HubName 成员包含控制器的名称,ActualLength 成员指示控制器名称字符串的长度。 请注意,ActualLength 不指示整个 USB_HUB_NAME 结构的大小。 如果 Parameters.Others.Argument1 中提供的缓冲区不足以容纳字符串,则 HubName 值可能会显示截断字符串。
若要获取保存字符串所需的缓冲区大小,请发送两次请求。 在第一个请求中,指定至少 sizeof(USB_HUB_NAME)
字节的缓冲区。 否则,ActualLength 不指示字符串的正确长度,并且请求失败并STATUS_BUFFER_TOO_SMALL。
第一个请求成功完成后,分配一个 ActualLength + sizeof(ULONG)
字节的缓冲区,然后再次发送请求。 请求完成后,HubName 指示整个控制器名称字符串。
要求
要求 | 价值 |
---|---|
标头 | usbioctl.h |