Я могу использовать 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
в качестве подпроцесса и не анализируя его вывод.