如何从WMI获取所有可用的PNP类名称

  • 本文关键字:PNP WMI 获取 c# wmi wmi-query
  • 更新时间 :
  • 英文 :


我可以使用devcon.exe并列出所有可用的类:

C:devcon classes
Listing 111 setup classes.
XboxComposite       : Xbox Peripherals
RemotePosDevice     : POS Remote Device
DigitalMediaDevices : Digital Media Devices
PrintQueue          : Print queues
…

因此,我可以看到有111个设置类。但是,当我查询Win32_PnPEntity:时

var query = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity");
var results = query.Get();
var set = new HashSet<string>();
foreach(var device in results)
{
var className = (string)device.GetPropertyValue("PNPClass");
set.Add(className)
}
var count = set.Count; // 25 <---- not 111

我得了25分,不是111分。因此,我的查询显然是机器实际可用内容的子集,这是有意义的。从devcon classes输出的类与PNPClass属性值一致,所以我认为它们是相同的。

因此,必须有一种方法来获取所有可用的PNPClass,除非devcon.exe只是硬编码它用devcon classes输出的列表

我想通过编程自己生成这个列表,而不是调用devcon classes作为子流程并解析它的输出。

不幸的是,Win32_PNPEntity并没有准确地映射到您将从devcon获得的数据。Devcon为您提供系统上所有可用的类,包括system、filter、PNP等。Win32_PNPEntity只是即插即用设备。Win32_PNPEntity数据还取决于当前连接的硬件。

devcon正在从"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class"中的子项输出所有数据,其中没有名为NoUseClass=1的名称/值。它显示Class和ClassDesc值。ClassDesc值可以是文本字符串、对.inf中某个值的引用或dll中的引用,因此输出该信息需要一些工作。

你想用这些数据做什么?也许还有其他方法可以获得你需要的信息?如果你只是想获得连接的PNP设备的类信息,那么你现有的代码应该会获得你需要的信息。

最新更新