CN101789019B - 一种可移动磁盘在Windows下的控制方法 - Google Patents

一种可移动磁盘在Windows下的控制方法 Download PDF

Info

Publication number
CN101789019B
CN101789019B CN2010101104156A CN201010110415A CN101789019B CN 101789019 B CN101789019 B CN 101789019B CN 2010101104156 A CN2010101104156 A CN 2010101104156A CN 201010110415 A CN201010110415 A CN 201010110415A CN 101789019 B CN101789019 B CN 101789019B
Authority
CN
China
Prior art keywords
magnetic disc
moveable magnetic
data
read
equipment
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2010101104156A
Other languages
English (en)
Other versions
CN101789019A (zh
Inventor
刘小华
张泽华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuzhou CRRC Times Electric Co Ltd
Original Assignee
Zhuzhou CSR Times Electric Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhuzhou CSR Times Electric Co Ltd filed Critical Zhuzhou CSR Times Electric Co Ltd
Priority to CN2010101104156A priority Critical patent/CN101789019B/zh
Publication of CN101789019A publication Critical patent/CN101789019A/zh
Application granted granted Critical
Publication of CN101789019B publication Critical patent/CN101789019B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Signal Processing For Digital Recording And Reproducing (AREA)

Abstract

一种可移动磁盘在Windows下的控制方法,包括设备驱动流程,初始化流程,设备操作流程,以及文件上传流程,可移动磁盘的数据存储以扇区为单位,在向可移动磁盘写入数据时,不足一个扇区的数据占用一个完整的扇区;通过定义UFI命令集来事先指定需要读取或写入数据的扇区,将对可移动磁盘读取的地址精确到扇区。本发明使用户实现了直接对可移动磁盘的任意物理扇区进行数据读写,从一定幅度提高了可移动磁盘空间的使用率,同时提高了数据信息的保密性。

Description

一种可移动磁盘在Windows下的控制方法
技术领域
本发明涉及一种可移动磁盘的控制方法,尤其是一种可移动磁盘在Windows操作系统下的读写控制方法。
背景技术
现有广泛应用的可移动磁盘,以U盘为例,其操作原理是:先将U盘格式化,根据windows的文件系统(如FAT16,FAT32,NIFS等系统类型)进行逻辑分区,按照文件系统定义的算法进行磁盘读写。市场上广泛应用的U盘,在USB Client模块中,主要使用USB存储类驱动(USB Storage  Class Driver),负责管理连接到USB上的U盘设备;使用windows文件系统作为操作系统与驱动器之间的接口。簇是操作系统所使用的逻辑概念,几个相邻的扇区组合在一起,形成一个簇,操作系统再对簇进行管理。每个簇可以包含2,4,8,16,32或64个扇区。
当操作系统请求从U盘读取或写入一个文件时,会请求相应的文件系统(FAT16/FAT32/NTFS)打开文件。操作系统规定一个簇中只能放置一个文件内容,文件所占用的空间,只能是簇的整数倍。如果文件实际大小小于一簇,它也占用一簇的空间。
USB类初始化成功后,文件系统首先获得U盘的主引导扇区,即MBR(Master Boot Record,硬盘主引导记录),获得分区信息,因为U盘无主引导扇区,所以重新获得逻辑盘信息,逻辑盘分配之后,打开文件系统的0号扇区,获得DBR(DOS BOOT RECORD,DOS引导记录)中的BPB(BIOS Parameter Block,),即BIOS参数表,使得DiskInfo的结构体实例化。然后再根据可用的开始簇号,将信息写入相应的若干簇中,最后再关闭扇区。
现有的几种Windows文件存储格式主要包括以下几种:
1、FAT16格式最大仅支持2GB分区,空间浪费大:每超过一定容量分区后,所使用的簇大小就必须扩增,才能使文件存放到U盘中,每个簇中剩下的空间是不能使用的。
2、FAT32格式U盘单个大文件存储限制:对最大分区容量的支持上,FAT32 的2TB最大分区容量时至今日仍不过时,但FAT32只能存储小于4GB的单个文件。
3、NTFS格式分区会减少U盘寿命:采用“日志式”文件系统,要记录详细读写操作,读写次数增多,导致U盘容易损坏,且400MB以下分区比FAT更浪费空间。
4、以上所有的分区格式都只能进行正常的数据存储,没有数据保密和加密的作用。任何人都可以拷贝,修改或者删除U盘中的数据内容。
现有广泛应用的windows文件系统,根据自身选择的文件系统对逻辑分区进行划分,因此系统保留扇区不能用来存储数据,这样使得U盘容量的实际利用效果不高,另外也不能根据用户的想法把数据存储在指定的扇区。Windows文件系统是操作系统与驱动器之间的接口。当操作系统请求从硬盘里读取一个文件时,会请求相应的文件系统(FAT16/FAT32/NTFS)打开文件。扇区是磁盘最小的物理存储单元,由于操作系统无法对数目众多的扇区进行寻址,所以操作系统就将相邻的扇区组合在一起,形成一个簇,然后对簇进行管理。每个簇可以包括2,4,8,16,32或64个扇区。操作系统规定一个簇中只能放置一个文件内容,因此文件所占用的空间,只能是簇的整倍数。如果文件实际大小小于一簇,它也要占一簇的空间,所以,一般情况下文件所占空间要大于文件的实际大小。
发明内容
本发明的目的在于针对现有可移动磁盘在Windows文件系统下控制方法的不足,提供一种新的在Windows文件系统下可移动磁盘的控制方法,以达到用户可以根据自己的想法直接对可移动磁盘任意物理扇区进行数据读写,提高可移动磁盘存储空间的使用率的目的。本发明的另一目的在于,能够根据用户的想法把数据存储在指定的扇区,解决了可移动磁盘用户对数据保密和加密的需求,让用户能更放心的将一些重要数据保存到可移动磁盘里进行相应的备份。
按照本发明,上述技术问题是通过下述技术方案来实现的:
一种可移动磁盘在Windows下的控制方法,包括设备驱动流程,初始化流程,设备操作流程,以及文件上传流程;
设备驱动流程包括:当可移动磁盘设备插入计算机时,总线管理器检测到可移动磁盘设备时根据设备的标识找到驱动程序加载;驱动初始完成后,操作系统自动调用设备添加回调函数;设备添加完成后,操作系统自动调用即插即用回调函数;PnP管理器请求获取设备的支持能力,在可移动磁盘设备中处理对不同操作系统的支持;当操作系统给设备分配资源后,PnP管理器发送IRP_MN_START_DEVICE请求;
初始化流程包括:可移动磁盘设备初始化时,首先打开可移动磁盘设备,获得可移动磁盘设备句柄,并对可移动磁盘设备句柄进行判断,如果无效,则报错,初始化失败;如果有效,则访问设备驱动程序,获得可移动磁盘设备的相关信息;若无法成功获得可移动磁盘设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了可移动磁盘;
设备操作流程包括:获取可移动磁盘设备句柄,发送操作可移动磁盘设备命令,读/写可移动磁盘数据,读取可移动磁盘本次操作的返回信息;
文件上传流程包括:获得文件有效路径和名称,对可移动磁盘设备进行初始化,如果获得可移动磁盘设备写命令的允许,则对可移动磁盘读状态进行判断,如果符合可移动磁盘设备正常读写要求,则创建目标文件,根据读数据命令和数据大小,实现物理空间的划分,然后依次将数据写入所指定的物理空间里面;否则,如果读数据或读状态信息时错误,则报错并关闭可移动磁盘设备,关闭目标文件;
可移动磁盘的数据存储以扇区为单位,在向可移动磁盘写入数据时,不足一个扇区的数据占用一个完整的扇区;通过定义UFI命令集来事先指定需要读取或写入数据的扇区,将对可移动磁盘读取的地址精确到扇区。
作为本发明进一步的实施方式,设备操作流程包括驱动层操作处理流程和应用层读写处理流程,应用层读写处理流程包括读数据操作流程和写数据操作流程。
读数据操作流程进一步包括以下步骤:
S301:可移动磁盘上电后,根据已定义好的UFI命令,将INQUIRY Command命令作为可移动磁盘接口设备参数传送给主机,获取可移动磁盘配置;
S302:可移动磁盘写数据命令,可移动磁盘在相应的扇区处写入512字节数据,主机驱动根据访问命令访问可移动磁盘配置,并返回其状态信息,如果状态信息为错误则报错并关闭可移动磁盘设备,否则跳至步骤S304;
S303:可移动磁盘读数据命令,从可移动磁盘读数据命令中获得可移动磁盘读取数据的扇区,读取512个字节的数据,并返回读数据的状态,如果返回信息错误则报错并关闭可移动磁盘设备,否则跳至步骤S304;
S304:访问可移动磁盘读状态命令,从指定的BULK_TRANSFER_CONTROL地址读取状态信息并返回,如果读状态正确,即返回状态信息正确时,则对数据进行相应的加密运算,否则报错并关闭可移动磁盘设备;如果读数据命令正确,通过定义好的写管道,从指定的开始地址,将规定长度的数据读入缓冲区,通过DeviceIoControl()将数据发送给主机,并返回读状态信息;如果读状态信息正确,转S304,继续进行可移动磁盘操作,否则关闭USB句柄。
可移动磁盘读数据命令使用UFI命令READ(10) Command,该命令包含数据读取指定的开始扇区地址,以及数据规定长度,此命令要求可移动磁盘将指定逻辑块地址开始的数据读取出来并返回给主机。
写数据操作流程进一步包括以下步骤:
S311:可移动磁盘写数据命令,使用UFI可移动磁盘写数据命令WRITE(10) Command,该命令包含数据写入开始的扇区地址,以及数据规定长度,通过此命令请求主机通过媒介将数据传送给可移动磁盘,让其写入相对应的逻辑块地址;
S312:如果写数据命令正确,通过定义好的写管道,获取可移动磁盘句柄和属性,将规定长度的数据写入缓冲区,通过DeviceIoControl()将数据传给可移动磁盘,可移动磁盘根据指定的逻辑块地址,将数据写入相应的扇区,如果写状态信息出错,则关闭USB句柄。
作为本发明进一步的实施方式,驱动层操作处理流程包括以下步骤:
打开设备请求处理:在应用程序调用CreateFile( )时,I/O管理器创建主功能代码IRP_MJ_CREATE,在功能代码的回调函数中增加设备句柄计数;
关闭设备请求处理:在应用程序调用CloseFIle( )时,I/O管理器创建主功能代码IRP_MJ_CLOSE, 在功能代码的回调函数中减少设备句柄计数;
读写管道请求处理:在应用程序调用DeviceIoControl( )时,I/O管理器创建主功能代码IRP_MJ_DEVICE_CONTROL,根据上层定义的读写数据请求,配置URB,分配IRP发送给低层驱动程序,等待数据和状态返回;
可移动磁盘使能请求处理:测试可移动磁盘是否准备好,使用UFI命令TEST UNIT READY Command测试可移动磁盘是否已经准备好,如果已经准备好,则定义读管道,并将可移动磁盘配置信息返回给主机。
作为本发明进一步的实施方式,设备驱动流程包括以下步骤:
S101:当可移动磁盘设备插入计算机时,总线管理器检测到设备并根据设备的标识找到驱动程序加载,加载驱动首先初始化驱动对象,注册主功能代码和添加设备、卸载设备的回调函数,初始化完成后,这部分代码不再执行,其回调函数由操作系统调用执行;
S102:驱动初始完成后,操作系统自动调用设备添加回调函数,创建设备名和符号连接名,将创建的设备对象附加到设备对象栈中,将相应的参数记录到设备扩展结构中,设置对象标志位;
S103:设备添加完成后,操作系统自动调用即插即用回调函数,PnP管理器发送IRP_MN_QUERY_CAPABILITIES请求,请求获取设备的支持能力;
S104:当操作系统给设备分配资源后,PnP管理器发送IRP_MN_START_DEVICE请求,获取设备描述符,配置描述符,接口描述符,管道配置,将管道配置信息地址存储在设备扩展中,设置设备已启动标记。
作为本发明进一步的实施方式,设备初始化流程包括以下步骤:
S201:硬件接口获得 厂家标识和产品标识,并对该信息进行判断,均正确转步骤S202,否则报错并关闭USB句柄;
S202:通过CreateFile(),打开可移动磁盘设备,再通过DeviceIoControl()读取可移动磁盘上的所有信息,包括获得可移动磁盘设备的句柄,以及要进行可移动磁盘操作的控制码,确定用户层和驱动层数据交换的缓冲区,并对可移动磁盘信息进行判断,如果无效,则报错,初始化失败;如果有效,跳到步骤S203;
S203:主机读取可移动磁盘标记:主机通过定义好的写管道,访问设备驱动程序,使用UFI命令INQUIRY Command要求可移动磁盘将其注册参数信息和配置信息等发送给主机;可移动磁盘设备返回请求的标准格式的数据,主机对命令的发送和返回状态以及数据进行判断,若无法成功获得可移动磁盘设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了可移动磁盘;否则关闭USB句柄。
作为本发明进一步的实施方式,文件上传流程包括以下步骤:
S401:判断文件名是否符合要求,如符合则进行以下可移动磁盘操作;
S402:可移动磁盘初始化;
S403:可移动磁盘使能;
S404:设置读管道,缓冲区大小,通过DeviceIoControl()读取缓冲区里的数据,如果读取成功,则说明读状态正确,可继续下面的操作,否则如果读状态失败,报错并关闭可移动磁盘句柄;
S405:创建一个与要上传的文件名相同的文件,获取可移动磁盘写数据命令状态,使用UFI读状态命令READ(10) Command,该命令包含数据读取的开始扇区地址,以及数据规定长度;
S406:判断从可移动磁盘逻辑地址块写入缓冲区的状态,如果正确,则将可移动磁盘指定扇区里的数据读取出来,通过写管道将数据写入缓冲区,发送给主机,数据写入建立的文件;
S407:将可移动磁盘逻辑块地址移动一个扇区大小,读取相应起始地址开始后的数据写入缓冲区,添加到主机文件;
S408:重复执行步骤S405-S407,直至所需上传数据全部读取写入文件中,再关闭文件。
通过应用此种实施方式所描述的方法,能够使得用户可以根据自己的想法直接对可移动磁盘的任意物理扇区进行数据读写,提高可移动磁盘存储空间的使用率。另外,对于转储数据,只有使用专用的接口才能读取数据,提高数据信息的保密性。
附图说明
图1为现有技术USB主驱动栈的结构图;
图2为本发明可移动磁盘设备的驱动过程流程图;
图3为本发明可移动磁盘设备的初始化过程流程图;
图4为本发明可移动磁盘设备的读写过程流程图;
图5为本发明可移动磁盘设备的文件上传过程流程图;
图6为本发明可移动磁盘设备控制方法的总体操作流程图。
具体实施方式:
附图给出了本发明的具体实施例,下面将通过附图和实施例对本发明作进一步的描述。
作为该可移动磁盘在Windows下的控制方法的一种较佳实施方式,可移动磁盘设备以典型应用的U盘为例,当然该方法也可以用于其他可移动磁盘控制。可移动磁盘在Windows下的控制方法包括:(1)U盘设备驱动程序;(2)应用程序访问接口两部分。
一、U盘设备驱动流程:
S101:当USB设备插入计算机时,总线管理器检测到设备时会根据设备的标识找到驱动程序加载。加载驱动首先初始化驱动对象,注册主功能代码IRP_MJ_CREATE,IRP_MJ_CLOSE,IRP_MJ_POWER,IRP_MJ_DEVICE_CONTROL, IRP_MJ_PNP 和添加设备、卸载设备的回调函数。初始化完成后,这部分代码不再执行,其回调函数由操作系统调用执行。
S102:驱动初始完成后,操作系统自动调用设备添加回调函数。回调函数实现以下功能:设备创建,设备名、符号连接名的创建,将创建的设备对象附加到设备对象栈中,将相应的参数记录到设备扩展结构中,设置对象标志位。
S103:设备添加完成后,操作系统自动调用主功能代码为IRP_MJ_PNP的即插即用回调函数。PnP管理器发送IRP_MN_QUERY_CAPABILITIES请求,请求获取设备的支持能力,在USB设备中主要处理对不同操作系统的支持。
S104:当操作系统给设备分配资源后,PnP管理器发送IRP_MN_START_DEVICE请求。对USB设备,此请求需要获取设备描述符,配置描述符,接口描述符,管道配置等信息,至少要将管道配置信息地址存储在设备扩展中,设置设备已启动标记。
二、U盘初始化流程
1、U盘初始化时,首先打开U盘,获得U盘设备句柄,并对其进行判断,如果无效,则报错,初始化失败;如果有效,跳到步骤2;
2、访问设备驱动程序,获得USB设备的相关信息。若无法成功获得USB设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了U盘。
具体操作流程为:
S201:硬件接口获得 “厂家标识”和“产品标识”,并对该信息进行判断,均正确转步骤S202,否则报错并关闭USB句柄;
S202:通过CreateFile(),打开U盘设备,再通过DeviceIoControl读取U盘上的所有信息,包括获得U盘设备的句柄,以及要进行U盘操作的控制码等,确定用户层和驱动层数据交换的缓冲区,并对U盘信息进行判断,如果无效,则报错,初始化失败;如果有效,跳到步骤S203;
S203:主机读取U盘标记:主机通过定义好的写管道,访问设备驱动程序,使用UFI命令INQUIRY Command(即访问命令,操作码为12h)要求U盘将其注册参数信息和配置信息等发送给主机;UFI设备(即U盘)返回请求的标准格式的数据,主机对命令的发送和返回状态以及数据进行判断,若无法成功获得USB设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了U盘。否则关闭USB句柄。
三、U盘操作流程
驱动层操作处理:
打开设备请求处理——应用程序调用CreateFile( )时,I/O管理器将创建主功能代码IRP_MJ_CREATE,在功能代码的回调函数中增加设备句柄计数。
关闭设备请求处理——应用程序调用CloseFIle( )时,I/O管理器将创建主功能代码IRP_MJ_CLOSE., 在功能代码的回调函数中减少设备句柄计数。
读写管道请求处理——应用程序调用DeviceIoControl( )时,I/O管理器将创建主功能代码IRP_MJ_DEVICE_CONTROL,根据上层定义的请求(读写数据),配置URB,分配IRP发送给低层驱动程序,等待数据和状态返回。
U盘使能请求处理——测试U盘是否准备好,即使用UFI命令TEST UNIT READY Command(操作码为00h)测试U盘是否已经准备好,如果已经准备好,则定义读管道,并将U盘配置信息返回给主机。
获取U盘句柄→发送操作(U盘)命令(获取状态、读、写、格式化等)→读/写数据
→读取U盘本次操作的返回信息。
应用层读写处理:
1、首先访问U盘的写命令,如果写命令(即发送命令)错误,则报错并关闭USB设备。写命令正确的话,跳至步骤2;
2、访问U盘的读数据命令,如果读数据失败,则进行报错,并关闭USB设备。读数据正确的话,则跳至步骤3;
3、访问U盘读状态命令,如果读状态正确,即返回状态信息正确时,则对数据进行相应的加密运算,否则报错并关闭USB设备。
U盘读数据具体操作流程如下:
S301:U盘上电后,根据已定义好的UFI命令,将INQUIRY Command(即访问命令,UFI命令定义为12h)作为U盘接口设备参数传送给主机,获取U盘配置;
S302:U盘写数据命令(UFI命令定义为2Ah),在相应的扇区处写入512字节数据,主机驱动根据访问命令访问U盘配置,并返回其状态信息,如果状态信息为FALSE则报错并关闭USB设备,否则跳至步骤S304;
S303:U盘读数据命令(UFI命令定义为28h)的判断。并从该命令获得U盘读取数据的扇区,续读取512个字节的数据,并返回读数据的状态。如果返回信息FALSE则报错并关闭USB设备,否则跳至步骤S304;使用UFI命令READ(10) Command(操作码为28h),该命令包含数据读取指定的开始地址Logical Block Address(逻辑块地址,即扇区地址),以及数据规定长度。此命令要求U盘将指定逻辑块地址开始的数据读取出来并返回给主机;
S304:访问U盘读状态命令,从指定的BULK_TRANSFER_CONTROL地址读取状态信息并返回,如果读状态正确,即返回状态信息正确时,则对数据进行相应的加密运算,否则报错并关闭USB设备;U盘读数据命令:如果读数据命令正确,通过定义好的写管道,从指定的开始地址,将规定长度的数据读入缓冲区,通过DeviceIoControl()将数据发送给主机,并返回读状态信息。如果读状态信息正确,转S304,继续进行U盘操作,否则关闭USB句柄。
U盘写数据具体操作流程如下:
S311:U盘写数据命令:使用UFI命令WRITE(10) Command(操作码为2Ah),该命令包含数据写入的开始地址Logical Block Address(逻辑块地址,即扇区地址),以及数据规定长度。通过此命令请求主机通过媒介将数据传送给U盘,让其写入相对应的逻辑块地址。
S312:如果写数据命令正确,通过定义好的写管道,获取U盘句柄和属性,将规定长度的数据写入缓冲区,通过DeviceIoControl()将数据传给U盘,U盘根据指定的逻辑块地址,将数据写入相应的扇区。如果写状态信息出错,则关闭USB句柄。
UFI(USB Floppy Interface,USB磁盘接口)命令集是针对USB移动存储而指定的命令块协议,它规定了主机和设备进行信息交换所使用的命令块,数据和状态信息,Bulk-Only传输协议定义了传输这些信息的方法,其中UFI命令块是封装在CBW(Command Block Warp,命令块包,主机通过Bulk-Out端点向设备发送的命令块包。)包中的CBWCB,设备通过读取CBWCB确定具体要执行的何种操作命令(如读命令),如何完成这个命令(如从闪存的哪个地址读,需要读取的长度),设备将命令的执行准柜台封装成CSW返回给主机。Bulk-Only事务以主机向设备发送CBW包,并建立相应的数据传输开始的,设备接收到CBW包,检查并解释它,试图满足主机的要求,并通过CSW包向主机返回状态信息。
由于不使用windows文件系统和USB存储类驱动,而是使用自己的驱动,按照UFI命令集直接读写U盘扇区,增加U盘的空间使用率,以及实现数据保密,加密的作用。
四、U盘文件上传流程:
U盘上传文件,先要获得文件有效路径和名称;然后对U盘进行初始化(初始化过程在图1已经讲明)。如果获得U盘写命令的允许(U盘写命令错误,则会关闭U盘),则对U盘读状态进行判断。
以上均符合U盘正常读写要求前提下,则创建目标文件。根据读数据命令和数据大小,利用指针实现物理空间的划分,然后依次将数据写入所指定的物理空间里面。否则,如果读数据或读状态信息时错误,则报错并关闭USB设备,即U盘;关闭目标文件。
具体操作实现流程如下:
S401:判断文件名是否符合要求,如符合则进行以下U盘操作;
S402:U盘初始化;
S403:U盘使能;
S404:U盘读状态命令,设置读管道,缓冲区大小,通过DeviceIoControl()读取缓冲区里的数据,如果读取成功,则说明读状态正确,可继续下面的操作,否则如果读状态失败,报错并关闭U盘句柄;
S405:创建一个与要上传的文件名相同的文件。获取U盘写数据命令状态:使用UFI读状态命令READ(10) Command(操作码为28h),该命令包含数据读取的开始地址Logical Block Address(逻辑块地址,即扇区地址),以及数据规定长度;
S406:判断从U盘逻辑地址块写入缓冲区的状态,如果正确,则将U盘指定扇区里的数据读取出来,通过写管道将数据写入缓冲区,发送给主机,数据写入建立的文件;
S407:将U盘逻辑块地址移动一个扇区大小,读取相应起始地址开始后的数据写入缓冲区,添加到主机文件;
S408:重复执行步骤S405-S407,直至所需上传数据全部读取写入文件中,再关闭文件。
以上为U盘操作的详细流程。本发明技术方案的优点在于:
1、可以通过定义UFI命令集来事先指定我们要从哪个扇区读取(或写入)数据。可以将地址精确到硬盘读取的最小单位“扇区”。而通用U盘只能以簇为单位读取(或写入)数据,无法知道数据具体存在簇中的哪个扇区中。
2、数据存储以“扇区”为单位;由于扇区是硬盘空间的最小单位,在写入数据时,不足一个扇区的数据仅占用一个完整的扇区;而通用U盘的保留扇区是不能使用的,而且它的数据存储以“簇”为单位,不足一个簇的数据将占用一个完整的“簇”。对比而言,本发明将一定幅度提高U盘空间的使用率。
3、通过UFI命令集读写命令的逻辑块地址的设置,可以在U盘任意扇区进行读写;而通用U盘由于windows文件系统的处理,包含了文件分配表等,即有若干个系统扇区是未用的。
通过应用本发明描述的一种可移动磁盘在Windows下的控制方法直接对U盘物理扇区的读写,在设计过程中避免了windows文件系统划分扇区的定义(FAT,NIFS等),从而没有保留区这个概念,增加了U盘的空间使用率。另一方面,U盘存储控制系统中,只能使用专用的接口才能读出数据。并对数据的传输加入了加密算法,增加了数据的保密性。
虽然结合附图描述了本发明的实施方式,但是本领域的普通技术人员可以在所附权利要求的范围内作出各种变形或修改。

Claims (9)

1.一种可移动磁盘在Windows下的控制方法,包括设备驱动流程,初始化流程,设备操作流程,以及文件上传流程,其特征在于:
所述设备驱动流程包括:当可移动磁盘设备插入计算机时,总线管理器检测到可移动磁盘设备时根据设备的标识找到驱动程序加载;驱动初始完成后,操作系统自动调用设备添加回调函数;设备添加完成后,操作系统自动调用即插即用回调函数;PnP管理器请求获取设备的支持能力,在可移动磁盘设备中处理对不同操作系统的支持;当操作系统给设备分配资源后,PnP管理器发送IRP_MN_START_DEVICE请求;
所述初始化流程包括:可移动磁盘设备初始化时,首先打开可移动磁盘设备,获得可移动磁盘设备句柄,并对可移动磁盘设备句柄进行判断,如果无效,则报错,初始化失败;如果有效,则访问设备驱动程序,获得可移动磁盘设备的相关信息;若无法成功获得可移动磁盘设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了可移动磁盘;
所述设备操作流程包括:获取可移动磁盘设备句柄,发送操作可移动磁盘设备命令,读/写可移动磁盘数据,读取可移动磁盘本次操作的返回信息;
所述文件上传流程包括:获得文件有效路径和名称,对可移动磁盘设备进行初始化,如果获得可移动磁盘设备写命令的允许,则对可移动磁盘读状态进行判断,如果符合可移动磁盘设备正常读写要求,则创建目标文件,根据读数据命令和数据大小,实现物理空间的划分,然后依次将数据写入所指定的物理空间里面;否则,如果读数据或读状态信息时错误,则报错并关闭可移动磁盘设备,关闭目标文件;
可移动磁盘的数据存储以扇区为单位,在向可移动磁盘写入数据时,不足一个扇区的数据占用一个完整的扇区;通过定义UFI命令集来事先指定需要读取或写入数据的扇区,将对可移动磁盘读取的地址精确到扇区。
2.根据权利要求1所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述设备操作流程包括驱动层操作处理流程和应用层读写处理流程,应用层读写处理流程包括读数据操作流程和写数据操作流程。
3.根据权利要求2所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述的读数据操作流程包括以下步骤:
S301:可移动磁盘上电后,根据已定义好的UFI命令,将INQUIRY Command命令作为可移动磁盘接口设备参数传送给主机,获取可移动磁盘配置;
S302:可移动磁盘写数据命令,可移动磁盘在相应的扇区处写入512字节数据,主机驱动根据访问命令访问可移动磁盘配置,并返回其状态信息,如果状态信息为错误则报错并关闭可移动磁盘设备,否则跳至步骤S304;
S303:可移动磁盘读数据命令,从可移动磁盘读数据命令中获得可移动磁盘读取数据的扇区,读取512个字节的数据,并返回读数据的状态,如果返回信息错误则报错并关闭可移动磁盘设备,否则跳至步骤S304;
S304:访问可移动磁盘读状态命令,从指定的BULK_TRANSFER_CONTROL地址读取状态信息并返回,如果读状态正确,即返回状态信息正确时,则对数据进行相应的加密运算,否则报错并关闭可移动磁盘设备;如果读数据命令正确,通过定义好的写管道,从指定的开始地址,将规定长度的数据读入缓冲区,通过DeviceIoControl()将数据发送给主机,并返回读状态信息;如果读状态信息正确,转S304,继续进行可移动磁盘操作,否则关闭USB句柄。
4.根据权利要求3所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述的可移动磁盘读数据命令使用UFI命令READ(10) Command,该命令包含数据读取指定的开始扇区地址,以及数据规定长度,此命令要求可移动磁盘将指定逻辑块地址开始的数据读取出来并返回给主机。
5.根据权利要求4所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述的写数据操作流程包括以下步骤:
S311:可移动磁盘写数据命令,使用UFI可移动磁盘写数据命令WRITE(10) Command,该命令包含数据写入开始的扇区地址,以及数据规定长度,通过此命令请求主机通过媒介将数据传送给可移动磁盘,让其写入相对应的逻辑块地址;
S312:如果写数据命令正确,通过定义好的写管道,获取可移动磁盘句柄和属性,将规定长度的数据写入缓冲区,通过DeviceIoControl()将数据传给可移动磁盘,可移动磁盘根据指定的逻辑块地址,将数据写入相应的扇区,如果写状态信息出错,则关闭USB句柄。
6.根据权利要求5所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述的驱动层操作处理流程包括以下步骤:
打开设备请求处理:在应用程序调用CreateFile( )时,I/O管理器创建主功能代码IRP_MJ_CREATE,在功能代码的回调函数中增加设备句柄计数;
关闭设备请求处理:在应用程序调用CloseFIle( )时,I/O管理器创建主功能代码IRP_MJ_CLOSE, 在功能代码的回调函数中减少设备句柄计数;
读写管道请求处理:在应用程序调用DeviceIoControl( )时,I/O管理器创建主功能代码IRP_MJ_DEVICE_CONTROL,根据上层定义的读写数据请求,配置URB,分配IRP发送给低层驱动程序,等待数据和状态返回;
可移动磁盘使能请求处理:测试可移动磁盘是否准备好,使用UFI命令TEST UNIT READY Command测试可移动磁盘是否已经准备好,如果已经准备好,则定义读管道,并将可移动磁盘配置信息返回给主机。
7.根据权利要求6所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述设备驱动流程包括以下步骤:
S101:当可移动磁盘设备插入计算机时,总线管理器检测到设备并根据设备的标识找到驱动程序加载,加载驱动首先初始化驱动对象,注册主功能代码和添加设备、卸载设备的回调函数,初始化完成后,这部分代码不再执行,其回调函数由操作系统调用执行;
S102:驱动初始完成后,操作系统自动调用设备添加回调函数,创建设备名和符号连接名,将创建的设备对象附加到设备对象栈中,将相应的参数记录到设备扩展结构中,设置对象标志位;
S103:设备添加完成后,操作系统自动调用即插即用回调函数,PnP管理器发送IRP_MN_QUERY_CAPABILITIES请求,请求获取设备的支持能力;
S104:当操作系统给设备分配资源后,PnP管理器发送IRP_MN_START_DEVICE请求,获取设备描述符,配置描述符,接口描述符,管道配置,将管道配置信息地址存储在设备扩展中,设置设备已启动标记。
8.根据权利要求1至7中任一权利要求所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述设备初始化流程包括以下步骤:
S201:硬件接口获得 厂家标识和产品标识,并对该信息进行判断,均正确转步骤S202,否则报错并关闭USB句柄;
S202:通过CreateFile(),打开可移动磁盘设备,再通过DeviceIoControl()读取可移动磁盘上的所有信息,包括获得可移动磁盘设备的句柄,以及要进行可移动磁盘操作的控制码,确定用户层和驱动层数据交换的缓冲区,并对可移动磁盘信息进行判断,如果无效,则报错,初始化失败;如果有效,跳到步骤S203;
S203:主机读取可移动磁盘标记,主机通过定义好的写管道,访问设备驱动程序,使用UFI命令INQUIRY Command要求可移动磁盘将其注册参数信息和配置信息等发送给主机;可移动磁盘设备返回请求的标准格式的数据,主机对命令的发送和返回状态以及数据进行判断,若无法成功获得可移动磁盘设备信息,则初始化失败;如果有效,且为期望值,则成功初始化了可移动磁盘;否则关闭USB句柄。
9.根据权利要求8所述的一种可移动磁盘在Windows下的控制方法,其特征在于:所述的文件上传流程包括以下步骤:
S401:判断文件名是否符合要求,如符合则进行以下可移动磁盘操作;
S402:可移动磁盘初始化;
S403:可移动磁盘使能;
S404:设置读管道,缓冲区大小,通过DeviceIoControl()读取缓冲区里的数据,如果读取成功,则说明读状态正确,可继续下面的操作,否则如果读状态失败,报错并关闭可移动磁盘句柄;
S405:创建一个与要上传的文件名相同的文件,获取可移动磁盘写数据命令状态,使用UFI读状态命令READ(10) Command,该命令包含数据读取的开始扇区地址,以及数据规定长度;
S406:判断从可移动磁盘逻辑地址块写入缓冲区的状态,如果正确,则将可移动磁盘指定扇区里的数据读取出来,通过写管道将数据写入缓冲区,发送给主机,数据写入建立的文件;
S407:将可移动磁盘逻辑块地址移动一个扇区大小,读取相应起始地址开始后的数据写入缓冲区,添加到主机文件;
S408:重复执行步骤S405-S407,直至所需上传数据全部读取写入文件中,再关闭文件。
CN2010101104156A 2010-02-11 2010-02-11 一种可移动磁盘在Windows下的控制方法 Expired - Fee Related CN101789019B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010101104156A CN101789019B (zh) 2010-02-11 2010-02-11 一种可移动磁盘在Windows下的控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101104156A CN101789019B (zh) 2010-02-11 2010-02-11 一种可移动磁盘在Windows下的控制方法

Publications (2)

Publication Number Publication Date
CN101789019A CN101789019A (zh) 2010-07-28
CN101789019B true CN101789019B (zh) 2012-05-30

Family

ID=42532233

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101104156A Expired - Fee Related CN101789019B (zh) 2010-02-11 2010-02-11 一种可移动磁盘在Windows下的控制方法

Country Status (1)

Country Link
CN (1) CN101789019B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102841785B (zh) * 2011-06-24 2015-10-14 北京奇虎科技有限公司 一种文件句柄关闭操作的方法及装置
CN103077042A (zh) * 2012-11-14 2013-05-01 无敌科技(西安)有限公司 可随时热拔插sd卡且可自动加载卸载的嵌入式方法
CN103745170B (zh) * 2014-01-02 2017-01-04 浙江云巢科技有限公司 磁盘数据的处理方法及装置
CN106358063B (zh) * 2014-01-24 2020-08-25 海信视像科技股份有限公司 一种触摸电视及其控制方法及控制装置
CN105681513A (zh) * 2016-02-29 2016-06-15 上海游密信息科技有限公司 通话语音信号发送方法、系统及通话终端
CN106802869B (zh) * 2017-01-17 2020-03-20 东方网力科技股份有限公司 类串口设备的驱动方法及驱动系统
CN108415665B (zh) * 2018-01-16 2021-09-28 广州视源电子科技股份有限公司 数据写入、读取方法与系统、数据读写系统
CN110221867A (zh) * 2019-05-31 2019-09-10 湖北三江航天万峰科技发展有限公司 一种xp系统下脉冲i/o功能卡通信驱动系统及方法
CN110737483B (zh) * 2019-10-12 2023-02-24 重庆邮电大学 一种基于Windows USB MassStorage类的信令、数据传输方法
CN110941843B (zh) * 2019-11-22 2022-03-29 北京明略软件系统有限公司 一种加密实现方法、装置、设备及存储介质
CN112579202B (zh) * 2020-12-17 2024-04-05 深圳软牛科技有限公司 Windows系统的服务性程序编辑方法、装置、设备及存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100419620C (zh) * 2005-05-23 2008-09-17 深圳市江波龙电子有限公司 一种usb海量存储设备上应用程序与usb海量存储设备进行命令交互和双向数据传输的方法
CN100370445C (zh) * 2005-08-10 2008-02-20 北京中星微电子有限公司 一种基于文件分配表的数据传输装置和传输方法
CN100561452C (zh) * 2007-10-23 2009-11-18 北京握奇数据系统有限公司 一种卡片操作系统对数据文件进行操作的方法及智能卡
CN100573480C (zh) * 2008-02-29 2009-12-23 中国科学院计算技术研究所 一种磁盘数据保护方法和系统

Also Published As

Publication number Publication date
CN101789019A (zh) 2010-07-28

Similar Documents

Publication Publication Date Title
CN101789019B (zh) 一种可移动磁盘在Windows下的控制方法
CN100419713C (zh) 对大容量存储器储存装置进行分割的方法
JP4206688B2 (ja) データ処理装置及びデータ処理方法
JP4155463B2 (ja) 順次書き込みのみを用いるフラッシュ管理システムを有するシステム、及びその方法
JP4238514B2 (ja) データ記憶装置
US7480766B2 (en) Interfacing systems operating through a logical address space and on a direct data file basis
JP6734751B2 (ja) インタフェイス制御メカニズムを有する電子システム及びその動作方法
US20080307158A1 (en) Method and apparatus for providing data type and host file information to a mass storage system
JP4807683B2 (ja) データ記憶装置
JP2010525453A (ja) ソリッドステートドライブ最適化用リムーブオンデリート技術
US20130151762A1 (en) Storage device
CN102132345B (zh) 光盘驱动装置
CN101449248A (zh) 数据存储装置以及数据存储方法
EP2045708A2 (en) Methods for implementation of an active archive in an archiving system and managing the data in the active archive
JP5068754B2 (ja) 改良されたホストインターフェイス
US20070033364A1 (en) Information recording medium, information recording medium accessing apparatus and accessing method
EP2293195A2 (en) Memory drive that can be operated like optical disk drive and method for virtualizing memory drive as optical disk drive
CN113316761B (zh) 自格式化数据存储设备
CN101788888A (zh) 一种实现目标端驱动的方法及该目标端驱动
JP4714291B2 (ja) 情報記録装置、情報記録方法及び情報記録用プログラム
JP2004178535A (ja) ストレージコントローラー、ストレージカード、磁気ディスクドライブ
JP5161989B2 (ja) 情報記録装置、情報記録方法及び情報記録用プログラム
TWM305380U (en) Multi-partition memory device
WO2009103182A1 (zh) 在移动终端的非线性闪存上实现u盘功能的装置
KR20080109391A (ko) 이중구조의 파일 얼로케이션 테이블을 이용하여 보안영역과일반영역의 크기가 고정되지 않는 것을 특징으로 하는데이터 보안기능을 가지는 매스 스토리지 장치 및 그 방법

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120530

Termination date: 20200211

CF01 Termination of patent right due to non-payment of annual fee