我正在使用STM32F072 Discovery board为自定义USB设备开发固件和PC测试应用程序。该设备在PC上包含Microsoft Windows Compatible IDs (WCIDs) to enable automatic installation WinUSB驱动程序。
设备在其他Windows 10主机上正确枚举,但在我的Windows 10开发PC上没有。我的开发PC以前曾尝试枚举该设备,因为它具有相同的VID / PID组合,但具有不同的描述符/元数据。如果我将PID更改为其他数字(我的开发PC的新版本), 会正确枚举。
由于Windows在以前的枚举中缓存USB描述符之类的方式,在固件开发期间,每次进行其他更改后,我都会在固件中增加设备产品ID(PID),以确保Windows不是从以前的描述符迭代中缓存一些东西,并弄乱那些原本会起作用的东西。
现在我已经让设备在Windows 7,8和10台PC上成功枚举为WinUSB设备,并且我建立了通信。但是,当我将固件更改回使用我开始使用的VID / PID,然后将设备连接到我的开发PC 时,它会显示在“其他设备”下的设备管理器中,并显示错误图标。我认为这是因为我的(Windows 10)开发PC以前曾经看过这个VID / PID组合有不同的描述符,所以它被一些糟糕的缓存内容搞糊涂了。
我已尝试使用regedit
删除HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy
下设备的注册表项,但问题仍然存在。 (另外,我收到错误,因为它无法删除VID_xxxx&PID_yyyy\zzzzzzzzzzzzz\Properties
子文件夹。)我也尝试使用USBDeview卸载设备的旧迭代,但这也没有任何区别。
另外值得注意的是,我无法再将设备传递到Virtual Box虚拟机。我不确定那里发生了什么。
答案 0 :(得分:4)
尝试删除表单中的任何相关注册表项:
HLKM\SYSTEM\CurrentControlSet\Control\UsbFlags\vvvvpppprrrrr
MSDN文章Microsoft OS Descriptors for USB Devices说:
操作系统在此注册表项下创建一个名为osvc的注册表项,该注册表项指示设备是否支持Microsoft OS描述符。如果在第一次操作系统查询Microsoft OS字符串描述符时设备未提供有效响应,则操作系统将不再请求该描述符。
答案 1 :(得分:3)
我知道OP已经解决了他的问题,但是对于其他有这个问题的人来说将来参考:在开发具有特定于供应商的类的USB设备时,我遇到了类似的问题。具体来说,(与您的体验相似)我无法删除:<
的 HKLM\SYSTEM\CurrentControlSet\Enum\USB\VID_xxxx&PID_yyyy
下,
所以每次修改设备代码时都必须增加PID。
无法删除这些密钥的原因是Properties
注册表子文件夹归System user
所有,因此即使作为管理员运行,也无法删除此子文件夹也不会更改其权限。
通过PsExec(来自Mark Russinovich的SysInternals suite的一部分)从提升的命令提示符运行 Regedit : psexec -s -i regedit.exe
以系统用户身份运行regedit,这意味着您可以删除那个讨厌的属性子文件夹和父VID_xxxx&PID_yyyy
个键。
答案 2 :(得分:1)
我遇到了同样的问题,卸载设备没有帮助。 弄乱注册表让我感到不安。 我仍然没有看到问题 3 的真正答案。 什么对我有用:打开设备管理器,选择非工作设备并执行“更新驱动程序”。从本地可用 (Microsoft) 驱动程序列表中手动选择驱动程序。 这并没有解决我所有的问题,但至少 Windows 不再忽略我的设备,我可以继续开发。
编辑:我在 Pete Batard 的一个名为 WCID Devices 的 github 项目中找到了一个非常有用的描述。我强烈建议您阅读此页面上的实施部分和以下内容WCID Devices
答案 3 :(得分:0)
有一些工具可以移除隐藏的USB设备痕迹,例如 USBOblivion http://www.thewindowsclub.com/usboblivion-remove-usb-traces-windows, USBDeview ,......
USBOblivion 的来源位于:https://sourceforge.net/projects/usboblivion/(https://www.openhub.net/p/usboblivion)答案 4 :(得分:0)
不幸的是,运行RegEdit的旧 PsExec 技巧并不总是有效。在这种情况下,请尝试使用:
ExecTI
-以TrustedInstaller身份运行 C:\Windows\regedit.exe
您还可以尝试使用非常老的工具: subinacl.exe
示例:
subinacl.exe /subkeyreg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Enum\USB\VID_0000&PID_0002\
进一步描述了here。并且已经证明在Win10上仍然可以使用。