USB大容量存储BOT
+ -

U盘BOT存储UFI协议INQUIRY命令说明及实例分析

2022-04-26 2186 2

INQUIRY定义为0x12,用于查询USB存储即U盘的基本信息,这些信息包括厂家信息,产品信息及产品版本号等。

INQUIRY流程图

INQUIRY命令流程图
INQUIRY命令通过BULK传输的OUT端点下发给设备,设备需要先返回基本的INQUIRY信息,再返回CSW状态。

INQUIRY命令格式

INQUIRY命令格式

  • LUN :被设置为 0 。
  • EVPD :被设置为 0 。
  • 页代码: UFI 设备仅支持页代码 0 标准查询数据。
  • 存储空间长度:指定被返回的查询数据的最大字节数, 0 值将不会产生错误。
  • UFI 设备通常根据请求的字节数返回查询的数据。它不会使用查询命令报告介质状态,例如介质改变或者驱动器不准备。查询命令将不会影响驱动器单元条件或介质状态。

INQUIRY命令是通过CBW下发的,内容位于该结构体的成员CBWCB成员数组0索引位置。
完整的CBW内容如下:

55 53 42 43 00 16 64 92 24 00 00 00 80 00 06 12 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00

格式:

UsbzhVDisk!_CBW
   +0x000 dCBWSignature    : 0x43425355
   +0x004 dCBWTag          : 0x92641600
   +0x008 dCBWDataTransferLength : 0x24
   +0x00c bmCBWFlags       : 0x80 ''
   +0x00d bCBWLUN          : 0 ''
   +0x00e bCBWCBLength     : 0x6 ''
   +0x00f CBWCB            : [16]  "???"
                   [0]:0x12
                   [1]:0x00
                [2]:0x00
                [3]:0x00
                   [4]:0x24
                [5]:0x00
                [6]:0x00
                   [7]:0x00
                [8]:0x00
                [9]:0x00
                   [10]:0x00
                [11]:0x00
                [12]:0x00
                   [13]:0x00
                [14]:0x00
                [15]:0x00

INQUIRY返回数据格式

INQUIRY返回数据格式
外设类型用于指示当前连接的设备类型, 0 表示软磁盘设备。 RMB 代表可移除介质( Removable Media Bit ), 1 表示该设备具有可移除介质, 0 表示没有。

UsbzhVDisk!_INQUIRY_STRUCT
   +0x000 DeviceType       : 0y00000 (0)
   +0x000 Reserved0        : 0y000
   +0x001 Reserved1        : 0y0000000 (0)
   +0x001 RMB              : 0y1
   +0x002 ANSIVer          : 0y100
   +0x002 EMCAVer          : 0y000
   +0x002 ISOVer           : 0y00
   +0x003 ReponseDataFormat : 0y0010
   +0x003 Reserved3        : 0y0000
   +0x004 AppendDataLength : 0x1f ''
   +0x005 Reserved5_7      : [3]  ""
   +0x008 VenderInfo       : [8]  "USBZHCOM"
   +0x010 ProductInfo      : [16]  "DataTraveler 2.0"
   +0x020 ProducetVerInfo  : [4]  "0000"

结构体定义如下:

typedef struct _INQUIRY_RESONSE_STRUCT
{
    UCHAR DeviceType:5;
    UCHAR Reserved0 : 3;

    UCHAR Reserved1 : 7;
    UCHAR RMB : 1;

    UCHAR ANSIVer : 3;
    UCHAR EMCAVer : 3;
    UCHAR ISOVer : 2;

    UCHAR ReponseDataFormat : 4;
    UCHAR Reserved3 : 4;

    UCHAR AppendDataLength;

    UCHAR Reserved5_7[3];
    UCHAR VenderInfo[8];
    UCHAR ProductInfo[16];
    UCHAR ProducetVerInfo[4];

}INQUIRY_RESONSE_STRUCT;

INQUIRY返回的CSW

55 53 42 43  50 70 f9 aa  24 00 00 00  80 00 06 12
00 00 00 24  00 00 00 00  00 00 00 00  00 00 00
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......
一篇文章帮你搞清楚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 功能进行称为流......
如何在Windows 10上格式化U盘
通常,Windows是一种非常用户友好的操作系统。 在Windows或任何可移动媒体(如外部硬盘驱动器)上格式化闪存驱动器时,也是如此。 尽管本指南专门针对Windows 10,但它将适用于XP及更高版本的所有Windows版本。我们将使用exFAT文件系统格式化USB闪存驱动器,但是,本指南将适......
什么是USB写缓存以及怎么禁用U盘的写缓存?
在本指南中,我们将从定义写缓存开始,并探讨其潜在的优缺点。 然后,我们将向您展示如何根据您的喜好在Windows10,Mac和Linux操作系统上启用或禁用写缓存。WindowsMacLinux“写”的定义在计算机的上下文中,写入是从源中检索信息,然后将该信息传递到目标的过程。 通常称为写入命令,您......
U盘枚举失败-该设备无法启动(GET_MAX_LUN请求)
群里有人用STM32搞了一个U盘,但是U盘在插入电脑后在设备管理器是枚举失败。我让他看一下设备状态:又是熟悉的错误码10,表示设备启动失败。设备的启动失败,一般在设备获取描述符获取之后,初始会失败,我之前在弄USB虚拟鼠标的时候也遇到此类情况。不过由于这个设备是U盘,本人还没有研究USB存储协议,只......
Win10电脑中外接的U盘在资源管理器中显示两次
在Windows10电脑中,外接U盘,在Windows资源管理器会显示两次,这种情况大家有没有留意到。不过,这种情况也只在Windows10操作系统中出现,而在以前的Windows操作系统中如Windows7,WINDOWS XP就不会出现这种问题。如本人电脑中接入了两个U盘,在Windows资源管......
U盘BOT存储UFI协议INQUIRY命令说明及实例分析
INQUIRY定义为0x12,用于查询USB存储即U盘的基本信息,这些信息包括厂家信息,产品信息及产品版本号等。INQUIRY流程图INQUIRY命令通过BULK传输的OUT端点下发给设备,设备需要先返回基本的INQUIRY信息,再返回CSW状态。INQUIRY命令格式LUN :被设置为 0......
Windows驱动usbstor硬件ID生成规则
如本人手中的金士顿U盘,在设备管理器中如下:我们查看设备的属性信息,可以看到,其使用的驱动是:USBPCapy.sysUSBSTOR.SYS从驱动来看,这是一个典型的BOT协议的U盘,更多详见:http://www.usbzh.com/article/detail-353.htmlUSBST......
Windows10 x64基于BOT规范虚拟U盘调试批量端点返回CSW的问题
虚拟了这么多的USB设备,突然想着U盘还没有弄,那就搞一个吧。就当是为了自己学习,没准那天突然有这样的需求。所以说干就干。我们知道,虚拟U盘其实是两套规范的,一种是传统的BOT协议,另一种是UASP的。这里为了兼容性,也是为了学习方便,我们使用BOT规范来虚拟一个标准的U盘。通过UsbTree......
USB存储BOT规范UFI命令大全
命令描述代码配对USB数据流对应章节FORMAT UNIT04houtputsection 4.1 on page 16INQUIRY12hinputsection 4.2 on page 19MODE SELECT55houtputsection......
Win10 x64使用BOT规范UFI命令虚拟U盘(USB3.0)演示
为了学习U盘UFI命令,使用Windows驱动虚拟了一个USB设备,该USB设备实现UFI命令支持的U盘。虚拟U盘原理大概框架如下:我们通过一个WDM驱动实现一个虚拟的总线驱动,创建一个U盘的PDO,让系统自带的usbstor.sys创建FDO并附加在我们的PDO上。而关于U盘的读写USBST......
U盘BOT存储UFI协议READ_FORMAT_CAPACITIES命令说明及实例分析
UFI命令READ_FORMAT_CAPACITIES(读取格式化容量)命令允许主机请求在当前安装的介质上可以格式化的可能容量列表。如果当前未安装介质,UFI设备应返回设备可格式化的最大容量。define READ_FORMAT_CAPACITIES 0x23READ_FORMAT_CAPAC......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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