【问题标题】:Trying to uniquely ID a USB device from WMI query using DeviceID field尝试使用 DeviceID 字段从 WMI 查询中唯一标识 USB 设备
【发布时间】: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


    【解决方案1】:

    看起来这个网络摄像头是一个复合设备。

    我认为ID为USB\VID_046D&PID_082D\36149BBF的节点是父设备。在这种情况下,第二个斜线之后的部分很可能是设备的序列号。 (我多年来一直为复合设备制作 Windows 软件,我们总是通过解析该部分来获得序列号)。该节点可能使用usbccgp.sys作为驱动,可以解析设备的接口描述符并产生子节点。

    ID为USB\VID_046D&PID_082D&MI_00\6&DB509D0&0&0000的节点是USB接口0对应的子节点。根据我的经验,我相信第二个斜杠后面的部分是某种唯一标识符,取决于在设备插入的 USB 端口上。

    对于 WMI 查询,您可能应该完全忽略子节点。在第二个斜线之前丢弃任何带有MI_ 的东西。父节点会告诉您有关设备身份的所有信息。

    【讨论】:

    • 通过查看 HKLM\System\CurrentControlSet\Enum\USB 下的注册表并匹配 ID,我终于弄明白了。有趣的是,我通过反复试验发现您是正确的 - 这是设备的序列号,尽管(在本例中为罗技)告诉我相反。该值在不同的计算机上保持不变。感谢您的注意 - 我已经成功编写了必要的代码,通过评估注册表中存储的内容来清除辅助条目。如果 WMI 可以过滤它会更干净。谢谢戴夫!
    • 我即将开始使用USB接口,所以开始研究。遇到this。看起来它澄清了这个问题。文档将最后一个组件正式称为 revision 代码,而不是序列号。
    • @Veverke 很高兴看到他们最终记录了它。感谢您提供后续链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多