的情况:,我们有一个软件套件,可以与我们内部构建的设备交互。该设备使用WinUSB进行通信,除非在固件更新期间处于引导模式。在引导模式下,设备使用不同的VendorID和ProductID,并使用HID进行通信。
的问题:更新固件,我们通过发送命令告诉设备进入引导模式。该设备使用新的VID和PID重新枚举。当更新新机器上的固件时,新机器上还没有连接过启动模式的设备,当引导加载程序出现时,Windows会跳“安装驱动程序”。(没有需要安装的驱动程序)。软件获得一个设备附加事件,所以我们开始固件更新。一旦Windows完成驱动程序的“安装”,它就会取消枚举并重新枚举设备,在更新过程中关闭我们的文件句柄。
的问题:是否有一种方法来检测是否正在安装驱动程序,以便我们可以在开始更新之前等待设备重新枚举?在我们的安装中有什么可以做的来抢占这种行为吗?也许是一种告诉Windows我们不希望在连接到设备时允许安装驱动程序的方法?
发布于 2017-03-24 19:35:05
也许是一种告诉Windows我们不希望在连接到设备时允许安装驱动程序的方法?
微软的开发人员网络有一个关于硬件开发的部分。他们有一篇文章特别是关于这个问题。重要的是,该文档指出,您的设备安装应用程序应该“在执行其安装之前确定其他安装活动是否正在进行”(重点是地雷),如果找到挂起的安装,则“应该退出”。
语句的最后一部分似乎表明Microsoft优先考虑已经安装或挂起的设备应用程序安装。
如果您的问题陈述是准确的:
当更新新机器上的固件时,新机器上还没有连接过启动模式的设备,当引导加载程序出现时,Windows会跳“安装驱动程序”。
听起来你可能是运气不好--或者打破了惯例--试图抢先驱动程序的安装行为。
我会利用上面提到的CMP_WaitNoPendingInstallEvents 函数,然后固件更新您的设备。我认为VID/PID与此无关,这取决于固件更新代码的运行位置。它看起来像Online 有同样的问题,并且具有相同的优先级(驱动程序安装)。
https://stackoverflow.com/questions/40003779
复制相似问题