首页> 中国专利> 一种USB海量存储设备上应用程序与USB海量存储设备进行命令交互和双向数据传输的方法

一种USB海量存储设备上应用程序与USB海量存储设备进行命令交互和双向数据传输的方法

摘要

一种USB海量存储设备上应用程序与USB海量存储设备进行命令交互和双向数据传输的方法。特别是一种有权限管理的操作系统,非授权用户如何使用创建的应用程序对USB海量存储设备发送命令,从而实现应用程序与USB海量存储设备进行命令交互和双向数据传输的方法,本发明利用操作系统任何用户可在USB可移动存储设备的可读写区创建新文件并可向其写入和读取数据这一特性,通过规定读写数据缓冲区的数据格式、长度以及新文件读写位置等数据,实现应用程序与USB可移动海量存储设备进行命令交互和双向数据传输。本发明为这类多种应用程序提供了可移动、便捷和可靠的运行环境,使带有应用程序的USB海量存储设备,实现了“即插即用”的目的。

著录项

  • 公开/公告号CN1869855A

    专利类型发明专利

  • 公开/公告日2006-11-29

    原文格式PDF

  • 申请/专利权人 深圳市江波龙电子有限公司;

    申请/专利号CN200510012541.7

  • 发明设计人 祝绪阳;

    申请日2005-05-23

  • 分类号G06F1/00(20060101);

  • 代理机构44241 深圳市智科友专利商标事务所;

  • 代理人曲家彬

  • 地址 518057 广东省深圳市南山区科技园高新南一道创维大厦C区603

  • 入库时间 2023-12-17 17:55:29

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-07-08

    未缴年费专利权终止 IPC(主分类):G06F1/00 授权公告日:20080917 终止日期:20140523 申请日:20050523

    专利权的终止

  • 2008-09-17

    授权

    授权

  • 2007-07-11

    实质审查的生效

    实质审查的生效

  • 2006-11-29

    公开

    公开

说明书

所属技术领域

本发明涉及一种USB海量存储设备技术领域的一种上层应用软件与设备之间实现双向数据通讯的方法。特别是一种有用户登录安全认证和权限管理的操作系统如Windows2000、Windows XP以上版本,非授权用户如何使应用软件程序对USB海量存储设备发送命令,从而实现USB海量存储设备应用程序与USB海量存储设备进行命令交互和双向数据传输的方法。

背景技术

为便于本发明理解相关术语解释如下:

1:USB海量存储设备:一种支持USB海量存储设备协议的可移动海量存储设备。如常见的闪存盘(USB Flash Disk),移动硬盘(USB Hard Disk)等设备。

2.操作系统非授权用户:是指操作系统登录用户由于操作系统对用户的默认权限管理,使以其身份创建或者运行的应用程序软件对系统设备没有读写或者写权限,从而不能通过操作系统提供的接口和方法实现与系统设备的命令交互和双向数据传输。

3.SCSI:是小型计算机系统接口(Small Computer System Interface)缩写,是计算机逻辑块设备与主机之间的命令控制和数据传输协议。

4.RBC:是精简块命令(Reduced Block Command)的英文缩写,是精简的SCSI命令集,是计算机逻辑块设备与主机之间的精简控制命令和数据传输协议。

5.WRITE10:是精简块命令集中主机对块设备的写命令码,为十六进制0x2A。

6.READ10:是精简块命令集中主机对块设备的读命令码,为十六进制0x28。

7.LUN:设备逻辑单元号。

8.LBA:设备读写的逻辑块地址。

当前,随着USB海量存储设备的普及,许多应用需求也不断与之结合起来,以便于为应用提供移动性、便捷性和实用性等特点。如闪存盘(USBFlash Disk)就出现了需要许多特殊应用。从理论上讲,所有可移动的USB海量存储设备都可以开发出各种特殊应用。在USB海量存储设备上开发各种应用程序时,上层应用软件需要与在USB海量存储设备之间进行命令交互和数据传输,以便于应用程序能够正确和识别所支持的USB海量存储设备。在各种操作系统上,系统都提供了基于USB海量存储设备的通信通道,绝大多数操作系统都是采用SCSI命令协议去访问和控制USB海量存储设备。比如在Windows 2000以上NT内核平台操作系统,就是通过设备输入、输出控制接口访问设备的,只要命令协议是按照SCSI的RBC协议和格式定义,则协议定义的命令以及用户自己定义的私有协议将都可以通过该命令通道发送给USB海量存储设备,如闪存盘(USB Flash Disk)等逻辑块设备。

在SCSI命令集中,WRITE10和READ10的命令码分别为十六进制0x2A和0x28,WRITE10的命令参数为设备逻辑单元号(LUN),设备读写的逻辑块地址(LBA),数据写入长度。

当USB海量存储设备的主控芯片接受到WRITE10的SCSI命令时,通过分析上述参数得到写入的逻辑块地址(LBA)和设备逻辑单元号(LUN)以及数据长度,然后从数据接收端口接收完数据后就向指定的地址写入该数据。如果数据长度超过芯片一次能够容纳的长度限制,则可以分批接收和写入。

READ10的命令参数与WRITE10一样,也是设备逻辑单元号(LUN,设备读写的逻辑块地址(LBA),数据读取长度,当USB可移动海量存储设备的主控芯片接受到READ10的SCSI命令时,通过分析上述参数得到写入的设备读写的逻辑块地址(LBA)和设备逻辑单元号(LUN)以及数据长度,然后向数据发送端口发送数据,直到发送完指定的数据长度。如果数据长度超过芯片一次能够容纳的长度限制,则可以分批发送。

尽管各种操作系统提供了上述相同或者相近的SCSI逻辑块设备命令发送方式,但是对于具有用户权限管理的安全操作系统,如果应用程序的创建或者运行者如果没有相关的设备访问权限,则通过这种方式是不行的。典型的是,在Windows2000以上的NT内核操作系统,如果要通过设备输入输出控制接口给逻辑块设备发送命令,则需要该设备的读写权限。但如果用户是普通的来宾(Guest)或者普通组(User)用户,操作系统默认是没有授予对逻辑设备的读写权限的,因此,需要管理员对这些用户添加设备读写权限,否则应用程序对设备的访问将失败。

随着USB海量存储设备的普及,其便捷性、移动性和实用性得到广大用户和软件厂商的青睐,各种基于这类设备即插即用的应用程序也不断在增加。这类应用程序如果需要同设备之间进行命令交互和数据传输,一般就需通过上述的RBC协议和SCSI命令通道。但如果给设备的使用者在登录操作系统时是设备非授权读写用户或者非管理员用户,尽管通过操作系统的内建程序菜单或者命令用户能够实现对可移动磁盘设备的数据文件存储,但是却无法在第三方创建的应用程序中发送SCSI命令控制和访问设备,因此也就不能够正常运行应用程序,或者应用程序功能受到一定限制。而系统登录用户是非管理员的情况是非常普遍的,如公共场所网吧、各大企业职员、政府工作部门使用的计算机操作系统,网络管理员为了保证操作系统的安全使用,仅提供普通用户帐号给使用者。因此,USB海量存储设备上的各种应用程序需要解决非授权用户下如何访问和控制设备是非常重要的,也是非常急迫的。目前,常见的解决办法有以下几种:

1编写专用的设备过滤驱动或者系统后台服务程序。该方法的缺点是驱动或者服务程序必须先由能够安装系统驱动或者服务程序权限的用户如管理员安装。因此,对于USB海量可移动存储设备上的应用程序需要先由管理员等用户安装驱动或者服务程序才能够正常使用是不可接受的。

2先以管理员身份安装其应用程序,同时创建一个特殊用户帐号。在非管理员用户登录时,应用程序仍然以该特殊用户身份访问设备。这样的缺点仍然比较明显,对于USB这样可移动存储设备上的应用程序仍然做不到即插即用,对用户是不方便的。

发明的内容

本发明的目的是提供一种方法:基于USB海量存储设备的应用程序软件在与设备进行命令通讯时,即使登录用户身份是对该设备无读写权限的非管理员用户也能够通过该方法,实现控制命令的交互和双向数据传输。也就是说,上层应用软件能够通过该方法发送命令,实现向设备发送控制命令或者写入私有数据,也可以从设备把相关数据读取上来供应用程序使用和分析。

本发明解决其技术问题所采取的技术方案是:USB海量存储设备上应用程序与USB海量存储设备进行命令交互和双向数据传输的方法,是利用操作系统任何用户通过通讯协议可在USB海量存储设备的可读写区创建新文件并可向其写入和读取数据这一特性,在USB海量存储设备的可读写逻辑盘创建一个不可重复的新文件,然后把SCSI命令的参数和数据存放在新文件的写入命令数据缓冲区里,USB海量存储设备的主控芯片应用程序接收到新文件的写入的SCSI写命令WRITE10以及指定写入长度的数据时,分析写入的数据发现不是普通的数据,而是含有规定格式的SCSI命令标识以及参数,则并不实际写入这些数据,而是执行其指定命令,如果命令执行正确,则返回应用层写入成功,否则返回错误信息,应用层在收到写入命令执行完毕后立即删除刚创建的文件,从USB海量存储设备读取数据,则需要采用两步才能够实现,第一步是创建新文件,后向新文件写入含有命令的规定格式数据,USB海量存储设备的主控芯片软件接收到此文件的SCSI命令WRITE10时通过分析发现,是需要向上层返回数据的特殊命令,因此将保留此WRITE10命令参数中设备逻辑单元号(LUN)和设备读写的逻辑块地址(LBA)并返回执行完毕,第二步是上层应用程序紧接着发送一个SCSI命令READ10,此命令必须确保该命令参数的设备逻辑单元号(LUN)和设备读写的逻辑块地址(LBA)与第一步的WRITE10一样,这样USB海量存储设备的主控芯片软件在接收到READ10命令,发现其参数的设备逻辑单元号(LUN)和读写的逻辑块地址(LBA)与前一条WRITE10命令的一样,则返回前一条WRITE10数据缓冲区中指定的SCSI命令需要的数据,上述的正常读写命令都可以保证USB海量存储海量设备的主控芯片软件在分析SCSI命令WRITE10和READ10时,既可实现设备的正常读写命令,同时实现了操作系统非授权用户下,应用程序能够通过文件的读写操作,在其读写命令WRITE10和READ10数据缓冲区中承载其他SCSI命令和数据,实现应用程序与USB海量存储海量设备的命令交互。

USB海量存储设备应用程序与USB海量存储设备进行命令交互和双向数据传输的方法还包括:

在USB海量存储设备的可读写逻辑盘创建的新文件,文件名是采用每次计算获取的变化的全球唯一16字节的序列号字符串,并将新文件设为非共享读写属性,在USB海量存储设备的可读写逻辑盘创建的新文件,文件扩展名采用单独定义或者随机变化的扩展名。

在USB海量存储设备的可读写逻辑盘创建的新文件规定格式,其中WRITE10命令规定格式顺序为:命令标识头、命令序列号、命令操作码、命令参数区、多余字节区、命令写入数据区,READ10命令规定格式顺序为:命令标识头、命令序列号、多余字节区、命令写入数据区。

在USB海量存储设备的可读写逻辑盘创建的新文件规定格式所述的新文件的命令标识头,为0xx55aa55aa555342。

在USB海量存储设备的可读写逻辑盘创建的新文件规定格式的命令序列号为16字节唯一的序列号。

在USB海量存储设备的可读写逻辑盘创建的新文件规定格式的新文件规定长度为512字节的奇数倍,512字节,1536字节或2560字节。

在USB海量存储设备的可读写逻辑盘创建的新文件规定格式的新文件规定长度如果为1536字节,则在发送WRITE10命令时,字节分配为:命令标识头、命令序列号、命令操作码、命令参数区、多余字节区共占512字节,多余字节区为512字节中未占用的多余字节,可设为零,命令写入数据区占用1024字节;在发送READ10命令,字节分配为:命令标识头、命令序列号,多余字节区占512字节,多余字节区为512字节中未占用的多余字节,可设为零,命令读取数据区占用1024字节,

USB海量存储设备主芯片应用程序逻辑流程写命令为:收到WRITE10命令全部数据---判断是否为规定长度数据---判断结果“否”--进入正常数据写入操作流程,判断结果“是”---判断命令标识头、命令序列号、命令操作码、命令参数区的全部字节内是否有命令标识头,命令操作码,判断结果“否”---进入正常数据写入流程,判断结果:“是”---分析命令参数,保存其设备逻辑号和地址以及命令序列号,然后接收剩下的字节数据---处理该命令请求,并保留命令参数信息,以备下一条读命令使用---判断命令处理是否正确---判断结果“否”---进入设置命令处理错误信息,判断结果“是”---设置执行结果数据为正确。读命令为:收到READ10命令全部数据---判断是否为规定长度数据---判断结果“否”---进入正常数据读取流程,判断结果“是”---判断设备逻辑号和地址是否与保存的写命令设备逻辑号和地址相同,判断结果“否”---进入正常数据读取操作流程,判断结果“是”----执行前一条具有相同的设备逻辑号和地址读命令保存的命令请求---发送含有命令标识头、命令序列号和多余字节区内的全部字节发送到数据设备端口---准备命令需要返回的剩下的字节数据并发送到指定设备端口---设置执行结果数据为正确,

USB海量存储设备主控芯片应用程序在处理SCSI命令WRITE10时,对需要返回数据的特殊控制命令,应将该WRITE10命令所指的设备逻辑单元号(LUN)、设备读写逻辑块地址(LBA)、命令序列号和命令参数保存到一个或者多个专用的数据变量中,

USB海量存储设备读取数据时,则必须保证第一步的WRITE10命令的设备逻辑单元号(LUN)与第二步的READ10命令的设备逻辑单元号(LUN)相同,第一步的WRITE10命令的读写逻辑块地址(LBA)与第二步的READ10命令的读写逻辑块地址(LBA)相同或存在固定函数关系。

USB海量存储设备主控芯片执行的命令处理完成后,立即关闭和删除在USB海量存储设备的可读写逻辑盘创建的新文件。

本发明的有益效果是:解决了在具有用户登录认证和安全权限管理的操作系统上,非授权设备访问的用户创建或者运行的第三方应用程序如何与USB海量存储设备进行双向数据传输的命令交互这个关键问题。本发明最重要的作用是避开了非授权设备访问的用户不再需要管理员用户安装特殊的驱动或者其他应用程序即可启动运行第三方应用程序,实现其与USB海量存储设备进行各种命令交互和双向数据传输功能,为这类应用程序提供了可移动、便捷和可靠的运行环境,具有软件运行的“即插即用”特性。同时也大大方便了用户对这类应用程序的使用,降低了管理员对计算机的软件安装管理难度。

具体实施方式:

下面结附图对本发明进行详细描述

附图1为本发明的方法实施例USB海量存储设备应用程序软件处理流程。

附图2为本发明的方法实施例USB海量存储设备应用程序SCSI命令WRITE10流程处理。

附图3为本发明的方法实施例USB海量存储设备应用程序SCSI命令READ10流程处理

本发明创造性在于利用了操作系统可让任何用户在USB海量存储设备的可读写区创建新文件并可向其写入和读取数据这一特性,通过规定协议读写数据缓冲区的数据格式、长度以及新文件读写位置等数据,实现了应用程序与USB海量存储设备进行各种命令交互和双向数据传输。

在Windows2000以及以上版本的操作系统,任何用户都是可以在USB海量存储设备上创建新文件,只要磁盘空间够用,同时也没有被写保护。新文件的读写在经过操作系统处理后最后都归结到SCSI命令WRITE10和READ10。

当需要向USB海量存储设备发送SCSI命令集中WRITE10命令时,先在USB海量存储设备的可读写逻辑盘上创建一个新文件,然后把SCSI命令的参数和数据存放在新文件的WRITE10命令数据缓冲区里,USB海量存储设备的主控芯片软件接收到新文件的SCSI命令集中WRITE10命令以及规定写入长度的数据时,如果分析写入的数据发现不是普通的数据,而是含有规定格式的SCSI命令标识以及参数,则并不实际写入这些数据,而是执行其指定命令,如果命令执行正确,则返回应用层写入成功,否则返回错误信息,应用层在收到写入命令执行完毕后立即删除创建的新文件。如不立即删除创建的新文件,USB海量存储设备的主控芯片需要不断分析WRITE10命令,这样对于正常的文件存储效率有严重影响,同时,也无法通过WRITE10命令从USB海量存储设备读取数据。

当需要向USB海量存储设备发送SCSI命令集中READ10命令时,则需要采用两步才能够实现,第一步是先在USB海量存储设备的可读写逻辑盘上创建一个新文件,在向创建的新文件写入含有命令的规定格式数据,USB海量存储设备的主控芯片软件接收到此文件的SCSI命令WRITE10时通过分析发现,是需要向上层返回数据的特殊命令,因此将保留此WRITE10命令参数中设备读写的逻辑块地址(LBA)和设备逻辑单元号(LUN)并返回执行完毕。第二步是上层应用程序紧接着发送一个SCSI命令READ10,此命令必须确保该命令参数的设备读写的逻辑块地址(LBA)和设备逻辑单元号(LUN)与第一步的WRITE10一样,这样USB存储设备的主控芯片软件在接收到READ10命令,发现其参数的设备读写的逻辑块地址(LBA)和设备逻辑单元号(LUN)与前一条WRITE10命令的一样,则返回前一条WRITE10数据缓冲区中指定的SCSI命令需要的数据。

上述两项操作都可以保证USB海量存储海量设备的主控芯片软件在分析SCSI命令集中WRITE10和READ10时,既可实现设备的正常读写命令,同时实现了在操作系统非授权用户下,应用程序能够通过新文件的读写操作,在其SCSI命令集中WRITE10和READ10命令数据缓冲区中承载其他SCSI命令和数据,实现应用程序与USB海量存储海量设备命令交互。

为了保证本发明的方法能够高效、可靠运行,保证上层应用程序软件能够与USB海量存储设备之间正确实现命令交互,当需要发送SCSI命令时,在USB海量存储设备的可读写逻辑盘上创建一个新文件,应保证是设备上原来没有和不可重复的新文件,以及防止其它应用程序也创建同样的文件,保证新文件读写操作的排它性,创建的新文件名采用每次计算获取的变化的全球唯一16字节的序列号字符串,新文件的文件扩展名采用单独定义或者随机变化的扩展名,并将新文件设为非共享读写属性。

本发明的方法在其SCSI命令集中WRITE10和READ10命令数据缓冲区数据长度尽可能固定,并且采用操作系统不常用的数据读写长度,便于USB海量存储设备主控芯片软件在分析时能够尽可能高效、准确与正常的设备WRITE10和READ10命令区分开,为了保证本发明的方法尽可能降低对设备的正常读写效率影响和保证数据传输的吞吐量的同时,也可以保证其对设备的正常读写效率影响最低。数据读写长度采用512字节的奇数倍512,1536或2560字节,上述数据是在操作系统的文件WRITE10和READ10命令中不常用,而且可保证数据传输的吞吐量。

本发明的方法实施例WRITE10命令数据缓冲区采用1536字节,规定格式为:

本发明的方法实施例READ10命令数据缓冲区采用1536字节,规定格式为:

本发明的方法实施例上述格式定义和数据长度可知,每个WRITE10和READ10命令可以传输的数据除了命令码以及参数外,最大为1024字节,如果超过该字节,必须分多次循环完成。

本发明的方法实施例在上述WRITE10和READ10命令数据缓冲区规定格式中,WRITE10和READ10命令数据缓冲区头含有特殊命令数据标识头,其目的是便于USB海量存储设备主控芯片软件在分析WRITE10命令时能够准确区分缓冲区是否含有特殊命令。应用程序在读取数据时,USB海量存储设备主控芯片软件在返回数据缓冲区头也应该填写特殊命令标识头数据。

本发明的方法实施例在上述WRITE10和READ10命令数据缓冲区规定格式中,WRITE10和READ10命令的数据缓冲区含有16字节的全球唯一的命令序列号,其目的是便于USB海量为了进一步保正本发明的方法在向设备读取数据时的可靠性,可在第一步向创建的新文件写入数据发送WRITE10命令时,在数据缓冲区中填入16字节的全球唯一命令序列号,USB海量存储设备主控芯片软件在分析WRITE10命令后保存该序列号,这样在接着的第二步发送READ10命令读取设备指定数据时,USB海量存储设备主控芯片软件在返回数据缓冲区中也同时插入该16字节全球唯一序列号,这样上层应用程序软件可识别是否为USB海量存储设备主控芯片软件返回的数据。

本发明的方法实施例向USB海量存储设备读取数据时,保证第一步的WRITE10命令的与下一步的READ10的设备逻辑单元号(LUN)一样,读写的逻辑块地址(LBA)存在一定的可计算函数关系。这个逻辑关系定义如下:如果假设第二步READ10的读写的逻辑块地址(LBA)为y,第一步WRITE10的读写的逻辑块地址(LBA)为x,则y=f(x).,f为x与y之间的可计算函数关系。最简单的函数关系是前面所描述的y=x,即两个读写的逻辑块地址(LBA)一样。

本发明的方法实施例USB海量存储设备主控芯片应用程序在处理SCSI命令WRITE10时,对需要返回数据的特殊控制命令,应将该WRITE10命令所指的设备逻辑单元号(LUN)、读写的逻辑块地址(LBA)、16字节的命令序列号和命令参数保存到一个或者多个专用的数据变量中,用于发现是需要返回的数据的特殊控制命令,作为判断是否是特殊WRITE10,READ10命令的一个附加条件。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号