首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析USB设备实例ID (DIID)?

如何解析USB设备实例ID (DIID)?
EN

Stack Overflow用户
提问于 2014-01-27 06:12:23
回答 3查看 2.1K关注 0票数 2

我想知道“设备实例ID”是如何生成的,或者如何解析它。

以以下字符串为例:

代码语言:javascript
复制
USB\VID_093A&PID_2700&MI_00\6&2703A67B&0&0000

据我所知:

  • USB告诉我们这是一个USB设备。
  • VID_093A指示其供应商ID
  • 类似地,PID_2700是产品ID

但是,我不知道剩下的事。

EN

回答 3

Stack Overflow用户

发布于 2022-06-06 03:43:51

MI用于多个接口。复合设备具有多个接口。

6&2703A67B&0&0000是实例ID。

开始处的6对应于设备节点的深度。

  • 0是根设备(例如volmgr,acpi_hal,它们有根\前缀)
  • 1是acpi_hal设备(例如acpi (使用PNP0C08\0代替vid/pid/1),它们有ACPI_HAL\前缀)
  • 2是acpi设备(例如根pci总线控制器(使用PNP0A08\0而不是vid/pid/2),它们具有ACPI\前缀)
  • 3是pci设备(例如xhci控制器,它们有PCI\前缀)
  • 4是xhci设备(例如根集线器,它们有IUSB3 3\前缀)
  • 5+是集线器设备(例如,usbccgp用于复合设备,ubstor用于存储等,它们具有USB\前缀)
  • 6+是usbstor设备(磁盘FDO、USBSTOR\前缀)或usbccgp复合接口(例如用于输入设备的隐藏FDO、USB\前缀和具有MI)。
  • 7+是端点(键盘用的kbdhid FDO,老鼠用的鼠标FDO,HID\前缀,还有MI)

ID 2703A67B是由父方分配的ID。xhci控制器为其所有根集线器分配相同的一个;单独的集线器由最后一个符号之后的值标识,这是一个简单的增量值。根集线器为它的子设备提供一个在所有设备和重新引导中相同的ID;分离的设备由最后一个符号之后的值标识,同样是一个增量值。复合设备为其子设备提供了一个ID,该ID根据插入到的集线器/端口进行更改;独立的接口由最后一个符号后的值标识。接口为其子端点提供了一个ID,该ID根据插入到哪个集线器/端口进行更改;独立的端点由最后一个符号后的值标识。

我可以确认,如果集线器插入根集线器上的不同端口或完全不同的集线器,则集线器分配给其子集线器的ID是否会发生变化。我写了“+”来表示可能存在的嵌套集线器。PCI总线也可以嵌套,并有一个子总线(通过PCIe到PCI桥或PCIe根端口aka )。( PCIe to PCIe桥),但我决定把它排除在外。根端口只是一个PCI设备,基本上是一个只有一个插槽的总线的桥接器/控制器(如果在要拆分的端口上配置了多个插槽),带有PCI\前缀的子设备也有一个PCI\前缀。

因此,xHCI控制器分配的ID可能取决于PCI插槽,而PCI总线控制器分配的ID可能取决于从属总线控制器连接到哪个端口或是否是根控制器。

这就是为什么当您将设备插入另一个端口时,它会再次安装驱动程序(除非它有序列号)。当DIID有一个注册表项时,会考虑安装这些驱动程序。USB设备将为它们插入的每个端口和根集线器组合提供一个单独的条目。复合设备接口对于每个端口和根集线器也有一个单独的条目,端点也是如此。

如果设备有一个序列号,这是不常见的,那么实例ID将是序列号,这将是相同的,无论它插入到系统的位置。如果复合设备具有序列号实例ID,则其接口可能具有与此相同的实例ID,因为设备ID中的MI将它们区分开来。端点不太可能有自己的序列号,并且可能使用常规的实例ID方案。

票数 1
EN

Stack Overflow用户

发布于 2014-01-27 06:45:27

你真的不能。这是微软对同样的问题的回应。

设备实例ID应视为不透明的。如果需要VID/PID,查询硬件和/或compa ID并解析这些ID。硬件ID不被认为是不透明的(但您仍然必须假设会出现新的硬件ID,因此您需要检测要解析的模式,并具有处理其他类型格式的主动代码)。

来源:http://social.msdn.microsoft.com/Forums/en-US/4ff692bc-97c9-4943-b1ee-ec4f098e3b14/how-to-detect-sim-card-change-or-imsi-change-programatically-in-windows-phone-8?forum=wpdevelop

票数 0
EN

Stack Overflow用户

发布于 2019-07-15 12:18:55

Microsoft设备实例ID页面很好地解释了设备实例ID字符串是如何组成的。

此页解释了如何创建USB标识符字符串(它构成设备实例ID的设备ID部分)。

具体而言,就您的例子而言:

  • USB\VID_093A&PID_2700&MI_00是设备ID,并且
  • 6&2703A67B&0&0000是实例ID

此外,设备ID告诉您:

  • USB\:这是USB枚举器下的一个设备。
  • VID_093A:Pixart公司制造了这个USB设备(您可以找到USB供应商ID列表这里)。
  • PID_2700:这是产品ID
  • MI_00:这是一个多接口的USB设备
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21374134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档