3

我正在开发用于 Windows 桌面系统的基于 USB 的外围设备,并且希望避免驱动程序安装步骤。部分原因是开发和签署自定义驱动程序所需的资源,部分原因是第三方驱动程序已被证明是用户的重大绊脚石。

这表明使用标准 USB 设备类。HID 简单而灵活,但由于 MCU 的特定限制而导致吞吐量不佳。相反,我正在评估一种模拟大容量存储设备的方案。

诀窍是报告包含隐藏设备 I/O 文件的 FAT 文件系统的元数据,然后接口应用程序使用原始文件无缓冲 I/O 进行通信。硬连线 I/O 文件扇区之外的所有数据在枚举时重新加载到 RAM 中并被忽略。

到目前为止,这工作出奇地顺利,通过快速 I/O 和枚举,在所有测试的系统上可能是经过良好优化的路径,并且没有特权提升。但是,这显然是对系统的滥用,并且如果 Windows 决定检测到 I/O 数据被不一致地读回、对集群链进行碎片整理、重新格式化为 exFAT 等,则可能会失败。

我的问题是这种情况是否已知会在实践中发生,或者可能在不久的将来发生?过去有没有尝试过这样的计划?大量不可靠的 USB 大容量存储设备能否有效屏蔽操作系统的花哨?

最后,是否有任何其他标准 USB 类或方法我可能会认为是更可靠的替代方案?Windows 10 终于添加了标准 CDC 支持,但支持早期版本将涉及绕过签名驱动程序安装(加上 BSOD、随机断开和枚举失败的历史让我对虚拟串行设备保持警惕。)

4

1 回答 1

1

考虑使用MS OS 2.0 描述符。基本上,您可以向 USB 设备添加一些特殊请求和描述符,以告知 Windows 8.1 及更高版本自动为该设备使用 WinUSB。安装 WinUSB 后,您可以使用libusblibusbp等库来访问设备,或者直接使用 WinUSB API。

对于使用 Windows 7 或更低版本的用户,您可以提供仅签名的 INF 驱动程序,它不太难或不太昂贵。请参阅我写的有关它的文档。或者你可以告诉他们使用像Zadig这样的实用程序来安装 WinUSB。Zadig 通过发明自己的根证书并将其作为受信任的根证书安装在用户机器上来绕过驱动程序的要求。

于 2017-02-15T21:25:01.510 回答