【发布时间】:2013-08-15 12:10:40
【问题描述】:
我需要知道系统中当前使用的 USB 设备类型。有一个关于 USB 设备类代码的USB specification。但我无法获取设备类型,WMI 请求WQL: select * from Win32_UsbHub 在类代码、子类代码、协议类型字段上给出空值。任何想法如何检测当前使用的 USB 设备类型?
我当前的代码:
ManagementObjectCollection collection;
using (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub"))
{
collection = searcher.Get();
foreach (var device in collection)
{
var deviceId = (string)GetPropertyValue("DeviceID");
var pnpDeviceId = (string)GetPropertyValue("PNPDeviceID");
var descr = (string)device.GetPropertyValue("Description");
var classCode = device.GetPropertyValue("ClassCode"); //null here
}
}
【问题讨论】:
-
您能否发布完整的示例,包括
ManagementScope、ObjectQuery和ManagementObjectSearcher的用法? -
ManagementObjectCollection 集合;使用 (var searcher = new ManagementObjectSearcher(@"Select * From Win32_USBHub")) 集合 = searcher.Get();
-
wbemtest.exe 工具效果相同:
Class cod, Subclass code, Protocol type字段为空 -
如您链接的 USB 规范中所述,您必须深入研究 device descriptor(设备类)或接口描述符(接口类)才能检索该信息。单独使用 WMI 可能无法做到这一点。
-
您在寻找什么类型的设备?如果您正在寻找特定的设备类型(如虚拟 Com 端口),您最好查看专门针对这些项目的 wmi 查询。