Tom*_*Tom 4 windows usb device-instance-id
我正在尝试在 Windows 系统上唯一地识别 USB 设备。由于序列号是可选的(并且在大多数设备上为空),我正在查看实例 ID。的领域,就像USB\VID_03F0&PID_094A\6&24b73976&0&2。
我已经知道如果我将同一设备插入不同的端口,这个 ID 会发生变化,但这对我来说没问题。问题是:如果我使用相同的设备(在我的示例中为鼠标)并将其插入,它会获得相同还是不同的实例 ID?
我做了一些研究,似乎没有人完全知道 VID 和 PID 背后的部分是什么。它们似乎可以识别端口和/或集线器,但是如果我将不同的设备插入同一个插槽,我不仅会看到不同的 VID 和 PID,还会看到不同的垃圾。例如,这是插入同一端口的键盘:USB\VID_046D&PID_C328&MI_00\7&3f9ff46&0&0000
Microsoft 文档和此处的相关问题均未回答此问题。
如果我有两个相似的鼠标(或键盘,或其他),即相同的制造商和型号,如果我将它们插入相同的端口,它们会获得相同或不同的实例 ID?
我是否有机会唯一标识特定设备(不仅仅是型号)?
gog*_*gog 10
关于你的第一个问题(在标题中):
Windows 上的 USB 实例 ID 对于设备来说是唯一的吗?
设备实例 ID 是系统提供的设备标识字符串,用于唯一标识系统中的设备。
和
设备实例 ID 在系统重新启动时是持久的。
所以,回答你的问题:
系统设备 ID 唯一标识特定 Windows 系统中的设备。
请注意:它的任务是识别这台机器中的设备。从机器上卸下设备后,该设备就不再是这台机器的一部分。
因此,现在,如果您从系统中移除设备并重新插入,
您无法确定设备实例 ID 是否相同,但是:
如果您将设备实例 ID 相同重新启动系统。
让我们继续,检查您的下一个问题。
关于你的第二个问题:
如果我使用相同的设备(在我的示例中为鼠标)并将其插入,它会获得相同还是不同的实例 ID?
让我们再次看一下Microsoft Device Instance ID 页面:
此字符串的格式由连接到设备 ID 的实例 ID 组成,如下所示:
<device-ID>\<instance-specific-ID>
和
以下是连接到 PCI 设备的设备 ID 的实例 ID(“1&08”)的示例:
PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02\1&08
因此,在USB\VID_xxx&PID_xxx\部分之后,您看到的是Instance ID(名称与 的区别不大System Device ID)
让我们看一下Microsoft Instance ID 页面:
实例 ID 是一个设备标识字符串,用于将设备与计算机上的其他相同类型的设备区分开来。实例 ID 包含序列号信息(如果底层总线支持)或某种位置信息
和
设备的 DEVICE_CAPABILITIES 结构的 UniqueID 成员指示总线提供的实例 ID 在整个系统中是否唯一,如下所示:
- 如果 UniqueID 为 FALSE,则总线提供的设备实例 ID 仅对该设备的总线是唯一的。即插即用 (PnP) 管理器修改总线提供的实例 ID,并将其与相应的设备 ID 组合,以创建在系统中唯一的设备实例 ID。
- 如果 UniqueID 为 TRUE,则由总线提供的设备 ID 和实例 ID 组成的设备实例 ID 唯一标识系统中的设备。
所以,回答你的问题:
UniqueID是TRUE,设备实例 ID 将是相同的,即使您将设备移动到不同的 USB 端口(我补充说:这是 USB 设备提供序列号时发生的情况)UniqueID是FALSE,则无法确定总线提供的实例 ID 是否相同,因此无法确定整个设备实例 ID 是否相同。(但是,实例 ID 在系统重新启动时应该相同,因此如果您有相同的设备 1 和设备 2,并在系统重新启动期间交换它们,我假设实例 ID 将相同,因此设备实例ID 也会一样!扩展这个,如果设备 1 和设备 2 是同一个设备,你可以简单地删除设备 1 并在系统重新启动时重新插入,设备实例 ID 应该是相同的!)这是因为系统设备 ID 的任务是识别系统中的设备,而不是整个世界(以及与系统分离的设备)。
这也回答了您的第三个问题:
如果我有两个相似的鼠标(或键盘,或其他),即相同的制造商和型号,如果我将它们插入相同的端口,它们会获得相同或不同的实例 ID?
关于你的最后一个问题:
我是否有机会唯一标识特定设备(不仅仅是型号)?
是的,并且(再次说到 USB)您甚至可以在全世界唯一地识别特定设备,如果制造商在 USB 总线上提供序列号,并且它保证您序列号对于该特定设备(VID, PID) 对。这是一个非常严格的限制,但例如考虑一个 USB WiFi 卡(我这里有一个 Netgear):
由于 MAC 地址根据定义是唯一的,因此您可以确保您可以唯一地标识该设备,即使它插入不同的机器。
但是,您无法唯一标识所有设备或您选择的特定设备。它必须满足这些要求。
我测试了前面提到的 Netgear USB WiFi 卡,它具有相同的设备实例 ID,即使插入不同的端口,甚至插入不同的机器。
我测试了一个提供 USB 序列号的通用 USB 密钥,其行为与 USB WiFi 卡相同。
在这些情况下,设备实例 ID 将类似于:
USB\VID_1221&PID_3234\00004700356
Run Code Online (Sandbox Code Playgroud)
I tested two identical generic USB keyboards, and I plugged them (one at a time) in the same USB hub port. The Device Instance ID remained the same (and additionally, Windows didn't show the "Installing hardware" popup when I plugged in the second keyboard). The Device Instance ID was:
USB\VID_1C4F&PID_0002\7&15cdfaa&0&3
Run Code Online (Sandbox Code Playgroud)
Then, I plugged one of the keyboards on a different USB port, and the Device Instance ID changed to:
USB\VID_1C4F&PID_0002\5&2eab04ab&0&1
Run Code Online (Sandbox Code Playgroud)
Microsoft page about USB Identifiers
| 归档时间: |
|
| 查看次数: |
6412 次 |
| 最近记录: |