正在解析WMI中Win32_PnPEntities的层次结构

Resolving hierarchy of Win32_PnPEntities in WMI

本文关键字:PnPEntities 层次结构 Win32 WMI      更新时间:2023-10-16

当USB设备插入或拔出时,我使用WMI查询来接收事件。

SELECT * FROM __InstanceOperationEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_USBControllerDevice'

从接收到的事件中,我使用Dependent对象来获取Win32_PnPEntity。

问题是,对于几乎所有的物理设备,都至少有两个逻辑设备。所以我收到的数据如下:

Device unplugged: LPK25
Device unplugged: USB Composite Device
Device plugged: LPK25
instance of Win32_PnPEntity
{
        Caption = "LPK25";
        ClassGuid = "{4d36e96c-e325-11ce-bfc1-08002be10318}";
        CompatibleID = {"USB\Class_01&SubClass_01&Prot_00", "USB\Class_01&SubClass_01", "USB\Class_01"};
        ConfigManagerErrorCode = 0;
        ConfigManagerUserConfig = FALSE;
        CreationClassName = "Win32_PnPEntity";
        Description = "USB Audio Device";
        DeviceID = "USB\VID_09E8&PID_0076&MI_00\6&383464A1&0&0000";
        HardwareID = {"USB\VID_09E8&PID_0076&REV_0100&MI_00", "USB\VID_09E8&PID_0076&MI_00"};
        Manufacturer = "(Generic USB Audio)";
        Name = "LPK25";
        PNPDeviceID = "USB\VID_09E8&PID_0076&MI_00\6&383464A1&0&0000";
        Service = "usbaudio";
        Status = "OK";
        SystemCreationClassName = "Win32_ComputerSystem";
        SystemName = "COMPUTER";
};
Device plugged: USB Composite Device
instance of Win32_PnPEntity
{
        Caption = "USB Composite Device";
        ClassGuid = "{36fc9e60-c465-11cf-8056-444553540000}";
        CompatibleID = {"USB\DevClass_00&SubClass_00&Prot_00", "USB\DevClass_00&SubClass_00", "USB\DevClass_00", "USB\COMPOSITE"};
        ConfigManagerErrorCode = 0;
        ConfigManagerUserConfig = FALSE;
        CreationClassName = "Win32_PnPEntity";
        Description = "USB Composite Device";
        DeviceID = "USB\VID_09E8&PID_0076\5&385A3465&0&2";
        HardwareID = {"USB\VID_09E8&PID_0076&REV_0100", "USB\VID_09E8&PID_0076"};
        Manufacturer = "(Standard USB Host Controller)";
        Name = "USB Composite Device";
        PNPDeviceID = "USB\VID_09E8&PID_0076\5&385A3465&0&2";
        Service = "usbccgp";
        Status = "OK";
        SystemCreationClassName = "Win32_ComputerSystem";
        SystemName = "COMPUTER";
};

显然,其中的LPK25是真正的设备,而USB复合设备是一些伪实体。对于一只老鼠,我得到四个实体。对于游戏控制器三等。那么,我该如何判断其中哪一个是"真实的东西"呢?

据我所知,你在制造混乱,对我来说,你收到两个事件是正常的。这是因为出现了两个新对象。

  1. usbccgp的低级别对象是usb音频的低级别驱动程序
  2. 支持音频硬件的高级对象

我认为您必须按服务进行筛选,例如,我使用USB密钥进行测试,我有两个事件,一个用于USBSTOR(低级别),另一个用于disk(高级别)。