首页 文章

Windows 10 - 清除USB枚举/驱动程序

提问于
浏览
3

摘要

我正在使用STM32F072 Discovery board为自定义USB设备开发固件和PC测试应用程序 . 该设备包括PC上的WinUSB驱动程序的Microsoft Windows Compatible IDs (WCIDs) to enable automatic installation .

该设备在其他Windows 10主机上正确枚举,但在我的Windows 10开发PC上没有 . 我的开发PC以前曾尝试枚举该设备,因为它具有相同的VID / PID组合,但具有不同的描述符/元数据 . 如果我将PID更改为其他数字(我的开发PC新增),它会正确枚举 .

问题

  • 如何在开发PC上使用我想要的VID / PID组合?

  • Windows缓存USB元数据是导致这台PC上枚举失败的原因吗?

  • 在设备描述符和元数据不断变化的阶段,(Windows)PC端用于测试/开发USB设备固件的最佳实践是什么?是否可以避免为了避免Windows缓存而咀嚼PID?

详情

由于Windows在以前的枚举中缓存USB描述符之类的方式,在固件开发期间,每次进行其他更改后,我都会在固件中增加设备产品ID(PID),以确保Windows不缓存以前的描述符迭代,并弄乱了原本可行的东西 .

现在我已经 Build 了沟通 . 但是,当我将固件更改回使用我开始使用的VID / PID,然后将设备连接到我的开发PC时,它会在设备管理器中显示在"Other devices"下,并显示错误图标 . 我认为这是因为我的(Windows 10)开发PC之前已经看到这个VID / PID组合具有不同的描述符,所以它被一些糟糕的缓存内容搞糊涂了 .

我已经尝试使用 regedit 删除 HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy 下的设备注册表项,但问题仍然存在 . (另外,我收到一个错误,因为它无法删除 VID_xxxx&PID_yyyy\zzzzzzzzzzzzz\Properties 子文件夹 . )我也尝试使用USBDeview卸载设备的旧迭代,但这也没有什么区别 .

另外值得注意的是,我无法再将设备传递到Virtual Box虚拟机 . 我不确定那里发生了什么 .

Error enumerating shown in Device Manager

Device Manager Code 28 - no compatible drivers

Device Driver properties

3 回答

  • 1

    我知道OP已经解决了他的问题,但是对于其他有这个问题的人来说将来参考:我在开发具有供应商特定类的USB设备时遇到了类似的问题 . 具体来说,(类似于您的经验)我无法从HKLM \ SYSTEM \ CurrentControlSet \ Enum \ USB \ VID_xxxx和PID_yyyy中删除键,因此每次修改设备代码时都必须继续增加PID .

    无法删除这些密钥的原因是Properties子文件夹由System用户拥有,即使以管理员身份运行,也无法删除此子文件夹,也无法更改其权限 .

    通过PsExec(来自Mark Russinovich的PsTools套件的一部分)从带有“psexec -s -i regedit.exe”的提升命令提示符运行Regedit,以系统用户身份运行regedit,这意味着您可以删除那个讨厌的Properties子文件夹以及父VID_xxxx和PID_yyyy键 .

  • 3

    尝试删除表单的任何相关注册表项:

    HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr
    

    MSDN文章Microsoft OS Descriptors for USB Devices说:

    操作系统在此注册表项下创建一个名为osvc的注册表项,该注册表项指示设备是否支持Microsoft OS描述符 . 如果设备在第一次向Microsoft OS字符串描述符查询操作系统时未提供有效响应,则操作系统将不再请求该描述符 .

相关问题