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

How to detect two USB devices connected to same USB hub in c#

我正在处理 .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 获得这些信息?

最后感谢我亲爱的朋友 Lucas 指点我关注 link:

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

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