为什么每次我将计算机插入另一个端口时,计算机都将变为“新USB设备”?


47

假设我有一只老鼠。我将此鼠标插入计算机上4插槽中的1插槽。它会遍历检测到的新设备以及所有这些,这很好。但是,如果以后再用同一只鼠标将其插入插槽3中,它将再次进行检测!为什么是这样?


3
我们该如何解决?
Panic Panic

Answers:


61

根据Raymond Chen的说法:

如果将USB设备插入其他端口,Windows为什么不能将我的USB设备识别为同一设备?

您可能已经注意到,如果您将USB设备插入计算机,则Windows会识别它并对其进行配置。然后,如果您拔下它,然后将其重新插入到另一个USB端口,则Windows会出现一阵失忆,并认为它是完全不同的设备,而不是使用上次插入时所应用的设置。这是为什么?

USB设备人员解释说,这种情况是在设备缺少USB序列号时发生的。

序列号在USB设备上是可选的。如果设备有一个,则Windows将识别该设备,无论您将其插入哪个USB端口。但是,如果没有序列号,则Windows会将每个出现在不同USB端口上的情况都视为是新设备。

(我记得一个主要的USB设备制造商不太了解序列号的工作方式。他们给了所有设备序列号,这很好,但是它们都具有相同的序列号。如果您插入两个USB设备,它们会发生令人激动的事情设备同时插入计算机。)

但是,如果Windows缺少序列号并显示在其他端口上,为什么Windows会将其视为其他设备?为什么不能只说:“哦,您在那儿,在另一个港口那边。”

因为一旦插入两个这样的设备,就会产生随机行为。根据即插即用枚举设备的顺序,每次启动时似乎随机分配两组设置。今天,设置以一种方式匹配,但是明天,当设备以另一种顺序枚举时,设置将被交换。(如果以不同的顺序插入设备,也会出现类似的令人困惑的行为。)

换句话说:事情变得糟透了,因为(1)事情本来就很糟糕-如果设备具有正确的序列号,这就不会有问题-(2)一旦您处于这种糟糕状态,替代方案就会糟透了。USB堆栈只是在尽量避免出现任何恶劣情况的情况下尽力而为。


17
我无法理解的一件事是为什么它需要重新安装设备驱动程序。现在是否要在每个端口上为同一设备维护单独的驱动程序副本?
阿涅尔·库里安

1
我会大胆猜测它只是将现有的驱动程序与新的端口名称相关联。
布莱恩·怀特

1
@BrianWhite会经历整个下载和配置过程。您可以通过点击任务栏上的通知观看
酷蓝

1
哦,我看过很多次了。但是,很难从该对话框中得知它是实际上是从Internet上获取新数据还是仅使用本地文件(但使用通用对话框文本)或两者之间的内容。
布赖恩·怀特

无论如何,您自己可以给USB设备提供序列号吗?还是那只能在制造层面上完成?
TMH 2015年

2

Windows(由于您未声明操作系统,我认为这是您正在使用的)将设备与设备插入的端口相关联,因此它认为“端口X中的USB DISK A”与“ USB中的USB DISK A”不同端口Y”,并相应地链接驱动程序和注册表项。

如果在查看“设备管理器”时使用“显示未连接的设备”选项,您将看到该设备已连接到该设备已插入的所有端口,但由于当前不在其中而呈灰色。当您将设备插入这些端口中的一个时,Windows只会激活该驱动程序实例,而当您将其插入另一个端口时,则需要在激活该端口之前为该端口定义一个新的驱动程序实例(这是您作为用户看到的过程)显示为“正在添加新设备”。

这样,您就可以将相同的设备插入到同时工作的不同端口中。还有其他方法可以实现此目标,而最终用户对操作系统使用哪种技术几乎没有或没有实际差异,但这是Windows选择如何安排它的方式。


4
接近,但不完全是。Windows识别在不同的端口相同的设备,只要它能够跟踪确切的设备。为此,设备必须提供序列号。
杰森2009年

4
磁盘实际上通常具有序列号,该序列号在介质本身上,并按格式放置在该位置。因此,即使是真正便宜的钥匙扣驱动器,也是所有USB设备中表现最好的。鼠标,键盘,操纵杆和其他廉价设备往往是最坏的罪犯。真正的烦恼是没有序列号的USB转RS-232串行适配器。每次不小心将其移动到新端口时,它将被分配一个新的COM端口名称。不好玩。
RBerteig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.