如何在c#中检测连接到同一USB集线器的两个USB设备

时间:2017-05-04 06:44:40

标签: c# .net usb wmi setupapi

我正在开发.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获取此信息?

1 个答案:

答案 0 :(得分:0)

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

Find USB drive letter from VID/PID (Needed for XP and higher)

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