Win10 x64使用BOT规范UFI命令虚拟U盘(USB3.0)演示

2022-04-28 2454 1

为了学习U盘的UFI命令,使用Windows驱动虚拟了一个USB设备,该USB设备实现UFI命令支持的U盘。

虚拟U盘原理

大概框架如下:
虚拟U盘框架

我们通过一个WDM驱动实现一个虚拟的总线驱动,创建一个U盘的PDO,让系统自带的usbstor.sys创建FDO并附加在我们的PDO上。而关于U盘的读写USBSTOR.SYS会通过URB使用批量传输的输入和输出端点进行数据传输,其遵循BOT规范,使用的命令是UFI命令。
而虚拟的这个U盘真实的数据读写,我们这里重定向一个真实的IMG文件中,进行数据的持久化。
这样当然们的驱动在加载后,会自带加载这个IMG文件,在磁盘中显示我们的虚拟磁盘。

虚拟参数及演示效果

这里我们虚拟了一个8M大小的U盘,参数为4096字节一个LBA,总共2046个LBA,采用的是USB3.0的端点,输入输出的端点描述符都为0x400个字节。
编译后的驱动及相关文件如下:

2022/04/29  14:57         8,384,512 8MDISK.IMG
2019/03/18  19:14            81,920 devcon.exe
2022/04/25  15:04                68 install.bat
2022/04/28  15:13               784 UsbzhVDisk.cer
2022/04/28  15:12             1,539 UsbzhVDisk.inf
2022/04/28  15:13           569,344 UsbzhVDisk.pdb
2022/04/28  15:13            48,944 UsbzhVDisk.sys
               7 个文件      9,087,111 字节

使用install.bat批处理安装驱动,安装后在系统中显示如下:
虚拟U盘在设备管理器中

我们在资源理理器中打开U盘,可以正常读写和格式化:
资源理理器中打开U盘

磁盘管理器中打开U盘

卸载驱动后,重新加载驱动,打开盘,数据并没有丢失。

虚拟U盘工程

虚拟U盘工程

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

为什么我的USB设备如U盘从一个端口换到另一个端口会重新安装驱动?
在 Windows 2000和更高版本的操作系统中,当 USB 设备从一个端口移到另一个端口时,将创建一个新的物理设备对象 (PDO)。 如果硬件报告了唯一的 USB 序列号,则不会创建新的 PDO。若要重复使用同一 PDO 并确保设备不会改变,无论设备是否已重新插入相同的端口或新端口,硬件供应商必......
USB闪存盘与SD卡:哪个更好?
毫无疑问,便携式外部存储设备是21世纪最重要的发明之一。 在存储设备的世界中,大小确实很重要,并且设备越小越好。两个使用最广泛的存储设备是USB闪存驱动器和SD卡。 它们体积小,重量轻,便于携带,几乎可以藏在任何地方。尽管达到了存储数据的相同目的,但这两个设备还是有很多差异。可随身携带的USB闪存驱......
关于USB闪存盘的19个常见问题
USB闪存驱动器,简称U盘,也称为拇指驱动器,zip驱动器,记忆棒,笔式驱动器,或简称为USB,是我们数据驱动世界中的常用工具。在我们的闪存驱动器常见问题解答列表中了解它们是什么,它们为何有用,如何使用它们以及更多内容。1.什么是USB闪存盘?USB闪存驱动器是一种紧凑的可移动存储设备,它使用与U......
Windows下UVC虚拟摄像头的实现
最近在Windows10 x64环境下,开发了一个虚拟UVC摄像头驱动。确切的来说这不是摄像头驱动,而是一个虚拟USB总线驱动。使用该虚拟总线驱动使用应用软件通过IOCTL控制总线子设备的创建与卸载。驱动安装完成后,是一个单纯的USB虚拟总线。应用软件通过发送自定义IOCTL码IOCTL_BUSEN......
一篇文章帮你搞清楚U盘启动模式USB-HDD/HDD+/ZIP/ZIP+/CDROM/FDD的区别
现在我们进行操作系统安装,不再像以前那样使用光驱动来进行操作系统来安装,而是使用U盘来进行操作系统安装。但在把U盘制作成启动盘时,写入软件在在写入模式有USB-HDD、USB-HDD+、USB-ZIP、USB-ZIP+、USB-CDROM和USB-FDD等方式让我们来选择,可我们却不知道该如何选择。......
USB存储设备在Windows环境下使用Uaspstor.sys或Usbstor.sys那个驱动?
USB Attached SCSI (UAS) 协议是一种新的大容量存储协议,旨在通过已建立的 USB 大容量存储协议(仅批量传输)和 BOT (提高性能) 。 它通过减少协议开销、支持 SATA 本机命令队列 (NCQ) 并并行处理多个命令。 为此,UAS 使用新的 USB 3.0 功能进行称为流......
BOT传输协议和UASP传输协议有什么区别?
BOT传输协议BOT (Bulk-Only Transport),诞生于1999年,专为USB 1.1所设计,至今最快的USB 3.1都可向下兼容这个基本的BOT传输协议。在传输资料作业开始时,外接USB 3.0设备与电脑主板(USB 3.0扩展卡)之间,在同一时间单位内,每次只传输单一指令,所以速......
如何在Windows 10上格式化U盘
通常,Windows是一种非常用户友好的操作系统。 在Windows或任何可移动媒体(如外部硬盘驱动器)上格式化闪存驱动器时,也是如此。 尽管本指南专门针对Windows 10,但它将适用于XP及更高版本的所有Windows版本。我们将使用exFAT文件系统格式化USB闪存驱动器,但是,本指南将适......
什么是USB写缓存以及怎么禁用U盘的写缓存?
在本指南中,我们将从定义写缓存开始,并探讨其潜在的优缺点。 然后,我们将向您展示如何根据您的喜好在Windows10,Mac和Linux操作系统上启用或禁用写缓存。WindowsMacLinux“写”的定义在计算机的上下文中,写入是从源中检索信息,然后将该信息传递到目标的过程。 通常称为写入命令,您......
Win10 x64虚拟设备之触摸屏
前一段时间在本人整理了自己编写的USB虚拟驱动框架,在其基础上实现了虚拟键盘,鼠标的功能。本节是继虚拟键盘鼠标的另一个虚拟USB设备-触摸屏触摸屏设备是HID设备的一个小类,但是随着触摸设备使用的越来越广泛,这类设备也变地越来越重要。触摸屏设备的原理和我们手机上的触摸屏原理一样,是在电脑屏幕上有一层......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
HID设备虚拟触摸屏上报的多点数据系统不响应
前一般时间在Windows10下使用USB驱动虚拟了一个触摸屏设备,上层软件按照HID报告述符的格式下发触摸屏数据给驱动,再由驱动将数据上交给系统,实现虚拟触摸屏的功能。今天,突发奇想,上次的报告描述符仅支持的是一个点触摸效果,今天保不实现了一下多点触摸效果,所以我通过在一个支持多点触摸屏的设备......
Win10 x64下USB-UAC虚拟声卡扬声器的实现
UsbzhVSpeaker虚拟声卡下载地址: http://www.usbzh.com/article/detail-1076.html去年的时候,使用portclass驱动模型在windows下虚拟了一个虚拟扬声器和虚拟麦克风。扬声器和麦克风在内部通过拓扑结构进行数据关联,即麦克风的数据的来......
BOT 简介
BOT全称Universal Serial BusMass Storage ClassBulk-Only Transport(Bulk-Only Transport),是USB大容量数据存储的基础协议。BOT协议用于主机和USB设备之间进行大容量数据传输。对于USB主机来说,USB设备外部硬盘驱动器......
BOT 数据传输过程
按照USB规范,Bulk-Only 传输规范是系统也是通过默认管道(地址0 、端点 0 )进行枚举,枚举后重新分配地址,再次枚举。枚举后,实际工作仅仅使用批量( Bulk )端点传送数据 / 命令 / 状态,批量传输方式不受时间限制并能保证数据的完整性。在取得的端点描述符中包含了 Bulk-In 和......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!