1

我正在开发一个 .NET 4.5 C# 项目,我需要确定我的 USB 设备是否连接到同一个 USB 集线器。

我用谷歌搜索并尝试探索许多 ManagementObjectCollection 的结构,例如 Win32_USBHub 和 Win32_PnPEntity,但我找不到任何具有位置或端口链信息的 WMI 结构。

我尝试了 USB 设备树工具,我可以在其中看到信息:

Device: 1
Location IDs             : PCIROOT(0)#PCI(1A00)#USBROOT(0)#USB(1)#USB(3)#USB(1)

Device: 2
Location IDs             : PCIROOT(0)#PCI(1A00)#USBROOT(0)#USB(1)#USB(3)#USB(2)

现在根据上述信息,我想编写逻辑来存储和比较两个 ID,以识别两个设备是否在同一个 USB 集线器上。

我尝试从以下网址探索 USB 设备树源代码: http ://www.uwe-sieber.de/usbtreeview_e.html

但是由于 NativeUsbLib 中的一些问题,仍然无法运行代码。

谁能帮我分享一些示例代码,我如何从 WMI 或 setupapi.dll 获取这些信息?

4

1 回答 1

1

最后感谢我亲爱的朋友卢卡斯指点我以下链接:

从 VID/PID 中查找 USB 驱动器号(XP 和更高版本需要)

这解决了我的问题。现在我使用的是使用 CM_Get_Parent 的 ParentPnpDeviceId 而不是端口映射,以检测两个 USB 设备是否连接到同一个 USB 集线器。感谢西蒙的出色解决方案。

于 2017-05-08T22:06:59.810 回答