首页 文章

有没有办法检测Windows是否正在安装设备驱动程序?

提问于
浏览
8

The situation: 我们有一个软件套件,可以与我们内部构建的设备进行交互 . 设备使用WinUSB进行通信,在固件更新期间在引导模式下使用EXCEPT . 在引导模式下,设备使用不同的VendorID和ProductID,并使用HID进行通信 .

The problem: 为了更新固件,我们发送命令并告诉设备进入引导模式 . 设备使用新的VID和PID重新枚举 . 在没有't had a device in boot mode connected before, Windows does the 2456948 dance when the bootloader shows up. (There'的新机器上更新固件时,无需安装驱动程序 . 软件获得DEVICE ATTACHED事件,因此我们开始固件更新 . 一旦Windows完成驱动程序"installing",它就会取消枚举并重新枚举设备,在更新过程中关闭我们的文件句柄 .

The question: 有没有办法检测Windows是否正在安装驱动程序,以便我们可以在开始更新过程之前等待重新枚举设备?我们可以在安装中做些什么来抢占这种行为吗?也许是一种告诉Windows我们没有连接到设备的方法?

1 回答

  • 1

    也许可以告诉Windows我们在连接到设备时不想允许安装驱动程序?

    微软的开发者网络有一个硬件开发部分 . 他们有一篇文章specifically about this issue . 重要的是,该文档指出您的设备安装应用程序应“在执行其安装之前确定是否正在进行其他安装活动" (emphasis mine) and - if pending installations are found - "应该退出” .

    声明的最后一部分似乎表明Microsoft优先考虑已经安装或挂起的设备应用程序安装 .

    如果您的问题陈述准确无误:

    在以前未连接过启动模式的设备的新机器上更新固件时,Windows会在引导加载程序出现时执行“安装驱动程序”跳舞 .

    通过尝试抢占驱动程序安装行为,听起来好像你可能运气不好 - 或者破坏惯例 .

    我会利用上面提到的 CMP_WaitNoPendingInstallEvents function,然后固件更新你的设备 . 我认为VID / PID与此无关,具体取决于固件更新代码的运行位置 . 它看起来像OSR在线论坛has a question of the same nature并假设相同的优先级(驱动程序安装) .

相关问题