【问题标题】:How to get all available PNPClass names from WMI如何从 WMI 获取所有可用的 PNPClass 名称
【发布时间】:2018-11-28 20:09:57
【问题描述】:

我可以使用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 作为子进程并解析它的输出。

【问题讨论】:

    标签: c# wmi wmi-query


    【解决方案1】:

    不幸的是,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 设备的类信息,那么您现有的代码应该会获得您需要的信息。

    【讨论】:

    • 啊,好的,这就为我解答。我只需要在插入的设备上进行一种健康检查。 “是否存在,如果存在,是否可以”并提供浏览器来获取 DeviceID 以进行检查。 Win32_PNPEntity 提供的内容将起作用。我只是想确定我没有遗漏什么。
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多