如何在 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 的出色解决方案。
我正在处理 .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 的出色解决方案。