【发布时间】:2017-02-21 13:28:01
【问题描述】:
情况: 我们有一个与我们内部构建的设备交互的软件套件。该设备使用 WinUSB 进行通信,固件更新期间处于启动模式时除外。在引导模式下,设备使用不同的 VendorID 和 ProductID 并使用 HID 进行通信。
问题: 为了更新固件,我们发送一个命令并告诉设备进入启动模式。设备使用新的 VID 和 PID 重新枚举。在以前没有连接过处于引导模式的设备的新机器上更新固件时,Windows 会在引导加载程序出现时“安装驱动程序”跳舞。 (没有要安装的驱动程序)。软件收到 DEVICE ATTACHED 事件,因此我们开始固件更新。一旦 Windows 完成“安装”驱动程序,它就会取消枚举并重新枚举设备,在更新过程中关闭我们的文件句柄。
问题: 有没有办法检测 Windows 是否正在安装驱动程序,以便我们可以在开始更新过程之前等待重新枚举设备?我们可以在安装中做些什么来抢占这种行为吗?也许是一种告诉 Windows 在我们连接到设备时我们不想允许安装驱动程序的方法?
【问题讨论】:
-
如果“安装驱动程序”的可执行文件正在系统上运行,你为什么不检查,比如 3 秒间隔 9 秒?
-
另外,我认为您可以记录您在应用程序中看到此设备的次数,以便您知道这是不是第一次,您需要等待。
-
@r1verside,我已经尝试过等待,但到目前为止,这似乎不是一个非常干净或有效的解决方案。根据 Windows 是否决定在线检查驱动程序、用户的连接速度等,等待的时间可能会有很大差异。另外,如果我能提供帮助,我宁愿不要浪费用户每次更新固件时等待的时间。 (如果 Windows 在后续固件更新中识别出该设备,则无需等待)。
-
如果您担心驱动程序安装会占用不必要的时间,为什么不给它想要的东西呢?首先使用正确的 VID/PID 安装虚拟驱动程序。如果它是恒定的,你只需要做一次;如果是动态的,你必须自己做一点舞蹈。重点是,你是那个跳舞的人,所以你知道什么时候结束。