【发布时间】:2014-05-29 17:01:13
【问题描述】:
当查询 WMI 并返回设备列表时,我在 DeviceID 字符串的 END 处记录了一些信息,这些信息到目前为止我所查看的任何地方都没有记录。以下是查看 Win32_PnPEntity 的 WMI 查询返回的 DeviceID 字符串示例:
USB\VID_046D&PID_082D&MI_00\7&3538A2BF&0&0000
现在,前两部分——“USB”和 VID 和 PID 都得到了很好的记录,“接口号”——&MI_XX 也是如此。但是,字符串的最后一部分(如下所示)在我查看过的任何地方都没有记录。我什至不知道如何称呼这部分 DeviceID 字符串:
\7&3538A2BF&0&0000
奇怪的是,它有多种口味。我已经注意到,如果我有两个相同的设备插入 PC,我会得到不同的值,由于缺乏更好的记录参考信息,我默认调用“实例 ID”。当我将两个相同的 USB 网络摄像头插入我的 PC 时,我看到了以下内容:
USB\VID_046D&PID_082D&MI_00\6&DB509D0&0&0000 USB\VID_046D&PID_082D&MI_00\7&3538A2BF&0&0000
到目前为止,一切都很好。我可以发现我有两个相同的设备插入 PC 并且可以解析这些唯一值。可是等等!当操作系统看到这些设备时,它还会加载驱动程序为不同的“接口”或操作模式提供的任何东西,所以当我对 Win32_PnPEntity 进行 WMI 查询时,连同上述条目,我也得到了这些DeviceID 字段中的条目也不错:
USB\VID_046D&PID_082D\195825EF
USB\VID_046D&PID_082D\36149BBF
所以问题在于,如果没有描述 DeviceID 的最后一部分是什么的文档,我不知道会发生什么,也无法在查询结果中将这些“重复”条目与它们的兄弟关联或分开。
目标是能够扫描 WMI 结果,识别给定设备的一个“主要”条目并丢弃其他任何内容。我可能会通过在“描述”字段中查找“USB 复合设备”来破解过滤,但这相当难看,并且会丢弃一些没有适当或供应商指定“描述”的设备。
MSDN 仅规定 DeviceID 是“USB 控制器的唯一标识符。此属性继承自 CIM_LogicalDevice。” -- 并且 CIM_LogicalDevice 也没有详细说明该字段的构成。
有人走过这条路或知道该往哪个洞看吗?在这里和其他论坛中的类似问题仍未得到解答。 (嘿,M$,为什么这么 %$@#!神秘???)
【问题讨论】:
标签: windows c#-4.0 usb wmi-query