滥用USB大容量存储类进行无人驾驶I / O.

时间:2017-02-15 10:03:36

标签: windows embedded usb device-driver usb-mass-storage

我正在开发一种基于USB的外围设备,用于Windows桌面系统,并且更愿意避免安装驱动程序。在某种程度上,由于开发和签署自定义驱动程序所需的资源,部分因为第三方驱动程序已被证明是用户的重要障碍。

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

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

到目前为止,这种方法运行得非常顺利,具有快速I / O和枚举功能,这可能是所有测试系统上的优化路径,并且没有权限提升。但是,这显然是对系统的滥用,如果Windows决定检测I / O数据被不一致地回读,对集群链进行碎片整理,重新格式化为exFAT,则可能会失败等等。

我的问题是,这种情况是否已知在实践中发生,或者可能在不久的将来发生?过去曾尝试过这样的计划吗?那些狡猾的USB大容量存储设备的数量是否会形成对操作系统变得有效的有效屏障?

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

1 个答案:

答案 0 :(得分:1)

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

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