我想知道“设备实例ID”是如何生成的,或者如何解析它。
以以下字符串为例:
USB\VID_093A&PID_2700&MI_00\6&2703A67B&0&0000据我所知:
USB告诉我们这是一个USB设备。VID_093A指示其供应商IDPID_2700是产品ID但是,我不知道剩下的事。
发布于 2022-06-06 03:43:51
MI用于多个接口。复合设备具有多个接口。
6&2703A67B&0&0000是实例ID。
开始处的6对应于设备节点的深度。
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方案。
发布于 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
发布于 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:这是产品IDMI_00:这是一个多接口的USB设备https://stackoverflow.com/questions/21374134
复制相似问题