windows - 滥用 USB 大容量存储类进行无驱动 I/O

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

<分区>

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

这建议使用标准 USB 设备类。 HID 简单且灵活,但由于 MCU 特定的限制而加剧了低吞吐量。相反,我正在评估模拟大容量存储设备的方案。

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

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

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

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

最佳答案

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

对于使用 Windows 7 或更低版本的用户,您可以提供一个已签名的仅 INF 驱动程序,这不是太难或太贵。查看document我写过它。或者你可以告诉他们使用像 Zadig 这样的实用程序安装 WinUSB。 Zadig 通过发明自己的根证书并将其作为受信任的根证书安装在用户计算机上来绕过驱动程序唱歌要求。

关于windows - 滥用 USB 大容量存储类进行无驱动 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42246158/

相关文章:

windows - 如何使用系统 (Windows) 从 Perl 调用子目录中的脚本

php - PHP 与应用程序之间的通信

Android:USB 通信 Android <-> 外部设备

Hibernate Embedded/Embeddable不是null异常

c - 在 linux 中获取 usb 设备在 c 中添加通知的最佳方法

python-2.7 - 在 Python 中简单地从 USB HID 设备读取/写入?

windows - DreamSpark (MSDNAA) Windows 产品 key

java - 在 Windows 中发送任意信号?

windows - 单个 .msi Windows 程序包安装程序文件的最大大小是多少?

c - 我无法理解优先级反转是如何发生的