我对 USB IOCTL IOCTL_USB_GET_ROOT_HUB_NAME有点困惑。它的目标设备是什么?虽然 MSDN WDK 文档清楚地表明了目标设备,但我仍然对 WDK 提供的 USBVIEW 示例感到困惑。我感到困惑的原因如下:
我是在 Windows 中编写内核模式和 USB 驱动程序的新手,现在正在研究 Windows 驱动程序套件中的 USBVIEW 示例http://msdn.microsoft.com/en-us/library/ff558728(v=vs.85).aspx . MSDN 将 USBVIEW 示例执行的第一步描述为:
枚举主机控制器和根集线器。主机控制器具有“HCDx”形式的符号链接名称,其中 x 从 0 开始。
使用 CreateFile() 打开每个主机控制器符号链接。
在树视图中创建一个节点来表示每个主机控制器。
打开主机控制器后,向主机控制器发送 IOCTL_USB_GET_ROOT_HUB_NAME 请求以获取作为主机控制器一部分的根集线器的符号链接名称
但是,我仔细检查了 MSDN http://msdn.microsoft.com/en-us/library/ff537326(v=VS.85).aspx中 IOCTL_USB_GET_ROOT_HUB_NAME 的使用情况,上面 写着:
IOCTL_USB_GET_ROOT_HUB_NAME 是用户模式 I/O 控制请求。此请求以USB 集线器 FDO为目标。
请注意,IOCTL_USB_GET_ROOT_HUB_NAME IRP 的目标是 USB 集线器 FDO。但是,正如 USBVIEW 示例所描述的,我们只是检索了主机控制器符号链接,这意味着设备对象是主机控制器设备对象。我们如何向它发送 IOCTL_USB_GET_ROOT_HUB_NAME IRP?我们应该先以某种方式检索 USB 集线器 FDO 吗?