2012-01-06 50 views
0

我正在使用WMI查询接收USB设备插入或拔出时发生的事件。在WMI中解析Win32_PnPEntities的层次结构

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复合设备是一些伪实体。 对于鼠标,我得到了四个实体。对于一个游戏控制器三等。 那么我怎么知道他们中的哪一个是“真实的东西?”

回答

0

根据我的理解,您正在制造混乱,对我而言,您收到两件事是正常的。这是因为出现了两个新对象。

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

我认为你必须通过服务来过滤,比如我测试用USB钥匙和我有两个事件,一个是USBSTOR(低电平)和disk第二(高电平)。

+0

我知道这很正常,但说我正在解析设备的名称:设备的名称是LPK25,而不是USB复合设备。如果我在Windows中打开设备管理器,它不会显示USB复合设备,只有LPK25 ..我可以通过DeviceID/HardwareID将它们连接在一起,但我希望能够过滤出过滤器驱动程序和其他Windows列为独立设备的外壳。 – Noora 2012-01-07 15:43:41