我正在开发一个用于Windows桌面系统的基于USB的外围设备,并希望避免驱动程序安装步骤。 部分原因是由于开发和签署自定义驱动程序所需的资源,部分原因是第三方驱动程序已被certificate是用户的重要绊脚石。
这表明使用标准的USB设备类。 HID非常简单,灵活,但吞吐量低,受到MCU特定的限制。 相反,我正在评估冒充大容量存储设备的scheme。
诀窍是报告包含隐藏设备I / O文件的FAT文件系统的元数据,然后接口应用程序使用原始文件无缓冲的I / O来通信。 在硬连线的I / O文件扇区之外的所有数据在枚举中重新加载到RAM中并被忽略。
到目前为止,这已经非常顺利地工作了,快速的I / O和枚举通过所有被testing的系统上大概优化的path,并且没有特权提升。 但是, 这显然是对系统的滥用,如果Windows决定检测到I / O数据读取不一致,要对群集链进行碎片整理,将其重新格式化为exFAT等,则可能会发生故障。
我的问题是,这种情况是否已知在实践中发生,或者在不久的将来可能发生? 过去有没有这样的计划? 那些狡猾的USB海量存储设备的数量是否会对操作系统形成有效屏蔽?
最后,还有没有其他的标准USB类或方法可以作为一个更可靠的select? Windows 10终于添加了标准的CDC支持,但支持早期版本将涉及绕过签名的驱动程序安装(加上BSOD的历史,随机断开连接和枚举失败已经留下我对虚拟串行设备的警惕。
考虑使用MS OS 2.0描述符 。 基本上,您可以添加一些特殊的请求和描述符到您的USB设备,告诉Windows 8.1和更高版本自动使用WinUSB的设备。 一旦安装了WinUSB,您可以使用像libusb和libusbp这样的库来访问设备,或者直接使用WinUSB API。
对于Windows 7或更低版本的用户,您可以提供一个签名的仅限INF的驱动程序,该驱动程序不是太难或昂贵。 看到我写的文件 。 或者你可以告诉他们使用像Zadig这样的工具来安装WinUSB。 Zadig通过发明自己的根证书并将其作为可信根证书安装在用户机器上来解决驱动程序的歌唱需求。