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

时间:2016-10-12 16:31:28

标签: c# windows usb hid

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

问题: 要更新固件,我们发送命令并告诉设备进入引导模式。设备使用新的VID和PID重新枚举。在新设备上更新固件时,如果设备之前没有连接过启动模式的设备,Windows会安装"安装驱动程序"当引导程序出现时跳舞。 (没有安装驱动程序)。软件获得DEVICE ATTACHED事件,因此我们开始固件更新。一旦Windows完成"安装"驱动程序,它取消枚举并重新枚举设备,在更新过程中关闭我们的文件句柄。

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

1 个答案:

答案 0 :(得分:1)

  

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

Microsoft的开发者网络有一个硬件开发部分。他们有一篇文章specifically about this issue。重要的是,该文档指出您的设备安装应用程序应“在执行其安装之前确定其他安装活动是否正在进行”(强调我的)并且 - 如果找到待处理的安装 - “应该退出”。

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

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

  

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

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

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