识别USB集线器上设备的端口号

时间:2020-06-08 18:35:44

标签: c# windows wmi

我正在尝试使用给定USB集线器上发生的端口的信息来检测USB设备的连接和断开。 集线器是一个具有已知VID和PID的7端口,实际上由两个这样连接的4端口集线器组成(根据USB Device Tree Viewer):

集线器1

集线器2(端口1.1)(获取)

端口2.1(免费)

端口2.2(免费)

端口2.3(免费)

端口2.4(免费)

端口1.2(免费)

端口1.3(免费)

端口1.4(免费)

要检测连接更改,我使用查询ManagementEventWatcher创建了一个SELECT * FROM __InstanceOperationEvent WHERE TargetInstance ISA 'Win32_USBHub'。之后,我想使用WMI查询来检索有关USB集线器的信息,例如SELECT * FROM Win32_USBHub WHERE SystemName LIKE '%VID_{vid}&PID_{pid}%'

SELECT * FROM Win32_USBControllerDevice

SELECT * FROM Win32_PnpEntity WHERE DeviceID LIKE 'USB%'或类似的内容。

但是,事件观察者收到的EventArgs或我提出的查询的任何结果似乎都没有包含有关USB集线器本身的端口的信息。

从USB设备树查看器中,我还看到名为“设备信息”的部分包含可用于实现此目的的信息:Location IDs。例如,连接到集线器的第4个端口(上述端口2.4)会导致

[PCIROOT(0)#PCI(0103)#PCI(0000)#USBROOT(0)#USB(21)#USB(1)#USB(4), ...]

连接到第六个端口(上面的端口1.3)时会导致

[PCIROOT(0)#PCI(0103)#PCI(0000)#USBROOT(0)#USB(21)#USB(3), ...]

使用PowerShell可以使用以下方法检索相同的确切信息 Get-PnpDeviceProperty -InstanceId "USB\VID_<VID>&PID_<PID>\<ID>"

我在这里缺少用C#检索此信息的方法吗?

编辑:虽然this question询问了类似的话题,但是接受的答案与所问的问题不匹配,而是枚举了没有任何内容的各种设备(例如,鼠标,图形卡,磁盘等)。使用注册表中定义的键针对非常有限且与通用USB设备不匹配的设备类,提供有关设备逻辑位置的其他信息。

0 个答案:

没有答案
相关问题