如何从 WMI 获取所有可用的 PNPClass 名称
How to get all available PNPClass names from WMI
我可以使用 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 为您提供系统上所有可用的 classes,包括系统、过滤器、PNP 等。Win32_PNPEntity 只是即插即用设备。 Win32_PNPEntity 数据还取决于当前连接的硬件。
devcon 正在从 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class" 中的子项输出所有数据,其中没有 name/value 称为 NoUseClass=1。它显示 Class 和 ClassDesc 值。 ClassDesc 值可以是文字字符串、对 .inf 中值的引用或来自 dll 的引用,因此输出该信息需要一些工作。
你想用这些数据做什么?也许还有另一种方法可以获得您需要的信息?如果您只是想获取已连接 PNP 设备的 class 信息,那么您现有的代码应该会获取您需要的信息。
我可以使用 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 为您提供系统上所有可用的 classes,包括系统、过滤器、PNP 等。Win32_PNPEntity 只是即插即用设备。 Win32_PNPEntity 数据还取决于当前连接的硬件。
devcon 正在从 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class" 中的子项输出所有数据,其中没有 name/value 称为 NoUseClass=1。它显示 Class 和 ClassDesc 值。 ClassDesc 值可以是文字字符串、对 .inf 中值的引用或来自 dll 的引用,因此输出该信息需要一些工作。
你想用这些数据做什么?也许还有另一种方法可以获得您需要的信息?如果您只是想获取已连接 PNP 设备的 class 信息,那么您现有的代码应该会获取您需要的信息。