【问题标题】:How does windows identify a USB device uniquely?windows如何唯一识别USB设备?
【发布时间】:2013-05-15 06:43:18
【问题描述】:

即使从 USB 设备提供的设备数据对于该品牌的所有设备都是通用的,Windows 如何唯一地识别 USB 设备? 换句话说,Windows 可以区分相同型号的戴尔键盘的两个实例,而无需键盘提供任何唯一的序列号。初始化 USB 设备时,窗口搜索的专有数据字段是什么?

【问题讨论】:

  • 这个问题是否特定于不提供唯一 ID 的设备?由于 USB 确实支持不同设备的唯一标识符(但它们不是必需的)。
  • 一个实例是键盘,或者 HID 设备通常不提供序列号。
  • 如果设备连接到不同的端口,即使它们相同,主机也可以区分它们。

标签: windows winapi usb driver hid


【解决方案1】:

Windows 使用Device Instance ID 进行标识。正如您在文档中看到的,它包含一个设备部分和一个实例部分。

设备部分取自 USB 设备。

如何生成实例部分取决于总线驱动程序。总线驱动程序不能仅仅依赖从 USB 设备返回的信息。因为两个相同的设备会破坏系统 - 设备实例 ID 必须是唯一的!所以通常它会附加额外的信息 - 端口号等(确切的算法是未知的,取决于驱动程序制造商)。 PNP 管理器还可以为实例 ID 添加更多唯一性。

【讨论】:

    【解决方案2】:

    当我们将一个设备连接到该设备的主机时,会发生枚举过程,在这个过程结束时,主机会为新连接的设备提供一个唯一的地址。因此,连接到系统的每个设备都会有一个由系统提供的唯一 ID,使用此 ID 可以识别设备并进行通信

    【讨论】:

    • 考虑这种情况。第一次插入 USB 设备,只要它打开操作系统的电源就知道该特定设备。但是在重新启动时,设备应该发送一些数据/唯一标识符/唯一编号字段,操作系统使用这些字段也可以识别出该设备之前也已插入。
    • @Bleamer 如果设备被拔出,它将在下一个插件时重新枚举,无论之前的状态如何。如果设备被重置/重启/不管你怎么称呼它,没有被拔掉,枚举不会丢失,设备重启的过程与它无关——它是每个设备不同的专有序列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2022-09-29
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多