有没有办法保存 USB 设备,以便在重新插入后可以防止重新枚举?

Posted

技术标签:

【中文标题】有没有办法保存 USB 设备,以便在重新插入后可以防止重新枚举?【英文标题】:Is there a way to save a USB device so that re-enumeration can be prevented after replugging? 【发布时间】:2012-06-08 03:04:59 【问题描述】:

首先,我们正在使用将自身绑定到 USB 设备的第 3 方软件。当此 USB 设备断开并重新连接时,软件无法与设备通信将停止工作,直到程序重新启动。即它只在启动时检测 USB 设备。

Windows 能够看到设备,但每次重新连接时都会执行完整的检测/驱动程序安装过程,即使重新连接到同一个 USB 端口也是如此。

这里的难点在于我们无法修改第三方软件在设备拔出后轮询合适的USB设备。

因此,我们想问一下是否有人知道如何编写 C++ 程序来保存 USB 状态/寄存器,防止 Windows 在重新连接时重新枚举 USB 端口,以及恢复保存的状态/注册。如果是这样,我们将不胜感激在这项工作中的一些指导。当然,我们对解决此问题的其他方法持开放态度。

【问题讨论】:

显然软件确实会随时注意到断开连接。破解这个问题不是更容易吗? 抱歉,我的问题措辞有误。应用程序本身不会在崩溃的意义上停止工作。但由于其操作的性质,它通过 USB 设备获取输入并对其进行处理。移除 USB 设备后,应用程序将停止使用,尽管它仍在运行。 【参考方案1】:

您不能在应用程序级别执行此操作。 USB 由驱动程序管理。此外,虽然 USB 设备的详细信息由特定驱动程序管理,但基本(如枚举)由标准 Windows USB 驱动程序处理。这是合乎逻辑的:Windows 必须首先枚举设备以确定其供应商 ID 和产品 ID,然后确定要加载的特定驱动程序。

至于每次重新插入时完全重新安装,这表明设备违反了 USB 规范或驱动程序违反了 Windows API。我的第一个猜测是该设备没有正确的序列号。

【讨论】:

谢谢。但是,我们无法控制第三方程序或有问题的设备驱动程序。有没有一种方法可以在不卸载驱动程序的情况下“暂停”和断开 USB 端口? 类似情况发生在我的设备来自主要制造商(罗技耳机,碰巧),所以我敢说它不是必然 Soya Bean'设备缺少某些东西,但很可能 Windows USB 驱动程序是一个特别愚蠢的实现。我已经将相同的相同设备插入 4 个端口和 4 个驱动程序安装... @Damon:作为真正为这样一个主要制造商(但不是罗技)工作的人,我可以根据经验说,只要产品有效,主要制造商就有可能违反 USB 规范。如果您的耳机可以安装 4 个驱动程序,那么制造商的问题是什么?

以上是关于有没有办法保存 USB 设备,以便在重新插入后可以防止重新枚举?的主要内容,如果未能解决你的问题,请参考以下文章

为啥u盘插到电脑上没有反应?

电脑连接的前一个usb

作为设备所有者授予 USB 权限

如何保存对 Python 列表所做的更改,以便在重新运行脚本后更新? [复制]

在linux系统里,如何检查新插入的USB设备是不是被系统识别?

stm32 USB-CDC 硬件复位后