CN1707436A - 一种主机与设备进行数据交换的方法 - Google Patents
一种主机与设备进行数据交换的方法 Download PDFInfo
- Publication number
- CN1707436A CN1707436A CN 200410048629 CN200410048629A CN1707436A CN 1707436 A CN1707436 A CN 1707436A CN 200410048629 CN200410048629 CN 200410048629 CN 200410048629 A CN200410048629 A CN 200410048629A CN 1707436 A CN1707436 A CN 1707436A
- Authority
- CN
- China
- Prior art keywords
- data
- applications
- upper layer
- packet
- layer software
- 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.)
- Granted
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种主机与设备进行数据交换的方法,包括:所述主机的上层软件向与所述主机连接的设备发出命令;所述设备执行命令并向所述上层软件返回状态信息;使用数据包存放命令执行结果数据;上层软件根据所述状态信息读取数据包,获得所述执行结果数据。本发明使得上层软件在非管理员用户权限下,可以取得底层设备返回的状态值和状态值之外的数据。
Description
技术领域
本发明涉及数据的传输与处理技术,尤其是涉及一种主机与设备进行数据交换的方法。
背景技术
出于安全性的考虑,现有的数据处理系统的操作系统(如Windows系统、Linux系统等)引入了管理员用户和非管理员用户的概念。
管理员用户对数据处理系统有绝对的控制权,可以更改数据处理系统的各种配置,还可以实现数据处理系统提供的各种功能;而非管理员用户的操作权限是受限制的,许多对数据处理系统的配置、控制等都不能完成,其中一点体现为许多非管理员用户模式下运行的上层软件,不能直接与底层设备(如各种硬件和外部设备等)进行通信。
请参阅图1,是上层软件、操作系统和底层设备之间进行数据交互的逻辑框图。其中,操作系统是三者的中间层,上层软件与底层设备的通信都需要通过操作系统中转,即上层软件并不直接与底层设备通信。而是由上层软件把命令与数据发给操作系统,然后由操作系统转交给底层设备;同样底层设备的返回数据也是发给操作系统,再由操作系统转发给上层软件。
但是,如果在非管理员用户权限下就有可能出现图2所示的情况,即上层软件的命令根本就还没到达底层设备就被操作系统拦截了。(当然,并不是所有的非管理员用户都不具有操作底层设备的权限,这点视乎不同的操作系统而定。本发明中,“非管理员用户”可以理解为“无权操作底层设备的用户”)。
这导致了许多底层设备的特殊功能在非管理员用户模式下无法使用。其中一个例子就是带加密功能的闪存盘在非管理员用户模式下,无法完成密码验证的功能。再例如,有些用户使用闪存盘的时候对安全性的要求比较高,他们不希望自己的闪存盘在插入数据处理系统后会出现盘符,或者如果他们的闪存盘分几个盘,他们不希望出现某个用于存放机密数据的盘的盘符。此时,他们要操作的这个盘就变成了隐藏盘。如果在操作系统的非管理员用户权限下,由于操作系统往往不提供接口给上层软件发送命令给底层设备,此时就无法完成访问隐藏盘的操作。
请参阅图3,一种现有技术采用写文件的方式来突破这个限制。
首先上层软件根据约定的格式将命令和数据打包成一个文件;然后调用操作系统的写文件函数,通过写文件的方式,将这些命令和数据发向底层设备;底层设备拦截并解析这些数据,执行相应的操作(如进行相应的密码验证);然后通过底层设备返回的状态值(GOOD/BAD),来判断密码验证的正确与否。
然而,所述现有技术具有一些不足之处:上层软件是通过底层设备返回的状态值来取得底层设备返回的数据,即上层软件只能取得一个二值的返回值(GOOD或BAD的状态),而无法取得更详细的数据(如验证错误后还剩余的验证次数等);而且由于许多更有用的信息都无法取得,大大限制了该方法的使用范围,例如,使用该现有技术就不能够访问隐藏盘。
发明内容
本发明解决的技术问题在于提供一种主机与设备进行数据交换的方法,使得上层软件在非管理员用户权限下,可以取得底层设备返回的状态值和状态值之外的数据。
为此,本发明解决技术问题的技术方案是:提供一种主机与设备进行数据交换的方法,包括:
1)所述主机的上层软件向与所述主机连接的设备发出命令;
2)所述设备执行命令并向所述上层软件返回状态信息;
其特征在于,还包括步骤:
3)使用数据包存放命令执行结果数据;
4)上层软件根据所述状态信息读取数据包,获得所述执行结果数据。
其中,所述数据包是建立在所述主机的存储单元中的文件,所述存储单元是易失或非易失的。
其中,在所述步骤1)之前或者在所述步骤2)之前或者在所述步骤3)之前建立所述数据包。
其中,所述状态信息取值固定,用于向上层软件发出信号,表示所述执行结果数据已存入在数据包中,所述数据包可供上层软件读取。
其中,所述状态信息取值根据所述命令执行情况变化,用于向上层软件发出信息,表示所述命令执行情况和/或是否产生执行结果数据;
对于执行所述命令产生了执行结果数据的情况,所述状态信息表明所述执行结果数据已存放在数据包中,所述数据包可供主机读取;
对于执行所述命令未产生执行结果数据的情况,所述状态信息表明没有产生数据包或数据包中没有存放执行结果数据,所述主机无需读取数据包。
其中,所述步骤1)包括:
11)所述上层软件将待发送的命令和数据加上标志符,建立数据包;
12)所述上层软件启动操作系统的写文件命令,将前述数据包转发至所述底层设备;
所述步骤2)包括:
21)所述底层设备接收前述写文件命令,解析接收的数据包;
22)所述底层设备执行前述数据包中的命令;
23)所述底层设备向操作系统返回状态值;
所述步骤3)包括:
31)所述底层设备将命令执行的结果和/或返回的数据,写入存储单元的数据交换区;
所述步骤4)包括:
41)所述操作系统向上层软件转发状态值;
42)所述上层软件读取存储单元的数据交换区,得到命令执行的结果和/或返回的数据。
其中,所述步骤42)具体包括:所述上层软件启动操作系统的读文件命令,采用非缓存方式读取所述存储单元的数据交换区,得到命令执行的结果和/或返回的数据。
其中,所述步骤42)具体包括:所述上层软件启动操作系统的读文件命令;操作系统在发送读命令前发送状态查询命令;底层设备报告介质切换;操作系统重新读取底层设备的文件系统,更新数据交换区的内容;上层软件得到命令执行的结果和/或返回的数据。
其中,所述步骤21)中,还包括当底层设备解析到数据包中没有标志符时,丢弃此数据包。
其中,所述步骤23)中,返回的数据包括标志符。
相对于现有技术,本发明的有益效果是:由于本发明方法中采用了数据包存放命令执行结果数据;底层设备在执行完上层软件的私有命令后,将命令执行的结果和/或返回的数据写入数据包,上层软件根据所述状态信息读取数据包,获得所述执行结果数据,因此在非管理员用户权限下也能够取得底层设备返回的除状态值以外的额外信息。
另外,本发明可以应用在目前带加密功能的闪存盘上,在非管理员用户权限下获得验证密码的剩余次数。本发明还可以实现隐藏盘的访问。或者在非管理员用户权限下,将有些数据加密的工作交由底层设备来进行数据运算,这样就可以降低被跟踪破解的可能,大大提高安全性。总之,本方法提供了一种在受限条件下的,上层软件与底层设备之间数据交换的方法。
附图说明
图1是上层软件、操作系统和底层设备之间的关系示意图;
图2是非管理员用户模式下操作系统拦截上层软件的命令的示意图;
图3是现有技术中上层软件与底层设备通信的流程图;
图4是本发明所述底层设备一个实施例的框图;
图5是本发明方法的流程图。
具体实施方式
本发明提供一种主机与设备进行数据交换的方法,使得在非管理员权限(包括但不限于Windows系统、Linux系统中非管理员用户等所有无法发送私有命令的场合)下可以向底层设备发送私有命令,并且获得底层设备返回的大量数据。
本发明主机与设备进行数据交换的方法,包括:
所述主机的上层软件向与所述主机连接的设备发出命令;
所述设备执行命令并向所述上层软件返回状态信息;
使用数据包存放命令执行结果数据;
上层软件根据所述状态信息读取数据包,获得所述执行结果数据。
请参阅图4,本发明中所述设备包括控制单元、可读写的存储单元和其他功能单元,所述控制单元连接并控制存储单元和其他功能单元;所述其他功能单元可以是加密验证单元或隐藏盘等;所述存储单元在操作系统下可以以一个磁盘形式出现。所述设备还可以是复合的设备,如磁盘与密码生成器的复合或者磁盘和电子钥匙的复合等。
请参阅图5,是本发明主机与设备进行数据交换的方法一种实施方式的流程示意图。
首先,在底层设备的存储单元预先建立一个临时文件A。
其次,上层软件将要发送的命令和数据加上一些标志符打包成一个文件的内容。
然后,上层软件通过调用操作系统的写文件函数,将此数据包写向底层设备。
底层设备拦截所有的写命令,解析接收的数据包。
如果底层设备解析到此数据包是上层软件发下来的命令,则根据收到的命令执行相应操作;否则就丢弃此数据包。
需要说明的是,此处丢弃数据一来是减少工作量,二来是防止上层软件的误操作破坏文件系统。如果采用存储区域来专用于接收命令以及返回数据,这个时候丢弃无用数据是好建议。如果存储区域还必须作为一个可以复制文件的区域,那就必须将数据写入存储区域内,并在每次收到数据的时候对数据进行检测。因此,是否丢弃数据视乎实际应用,有必要的话,就将数据写入底层设备内,否则就丢弃以提高效率。
底层设备在执行完相应的操作以后,将命令执行的情况和返回的数据打包,写入临时文件A。
然后,无论执行的操作成功与否,都返回状态GOOD。当然,也可以返回BAD,但如果返回BAD会导致操作系统发送REQUEST SENSE命令来查询错误原因,这样会影响效率。
上层软件接收到底层设备返回的状态值后,再去读取临时文件A的内容,得出命令执行的真正返回值。
这样,完成了在非管理员用户权限下发送私有命令的过程。
可以理解的是,所述临时文件A也可以在操作的过程中临时建立,并不限于事先建立。
为了帮助更好的理解本发明,下面结合实施例进行描述。
本发明的一个实施例是在非管理员用户权限下,进行底层设备的密码校验。
假设校验密码的命令为0x11,密码是“0x22 0x33 0x44 0x55 0x66”,则需要发送的命令为:
0x11 0x22 0x33 0x44 0x55 0x66
上层软件将该命令和数据加上事先约定好的标志符,如:
0x55 0xaa 0x55 0xaa
此外,还可以加上事先约定的与命令相关的一些数据,如本命令的长度,0x06。
上层软件可以根据实现约定好的格式将命令打包:
0x55 0xaa 0x55 0xaa 0x06 0x11 0x22 0x33 0x44 0x55 0x66
然后,上层软件调用操作系统写文件的函数(如可以调用WriteFile函数),要求写临时文件A,当然也可以写其他文件(因为只要操作系统将数据转发至底层设备就可以,底层设备无需知道操作系统正在写哪个文件。不管操作系统写临时文件A还是写其他文件,底层设备会截获所收到的数据,然后解析这些数据。)
然后操作系统将以上数据作为文件内容写入到底层设备。
此时底层设备将会收到一系列的写命令和数据包,包括系统写FAT,写目录区,写文件内容(即上层软件的数据包)等。
底层设备在收到每一个数据包后都解析数据包的内容,如果发现了事先约定的标志符“0x55 0xaa 0x55 0xaa”,则认为这个数据包是上层软件的打包,里面的内容是命令,然后将其后的数据“0x11 0x22 0x33 0x44 0x55 0x66”作为命令来解析,然后执行相应的操作。
在底层设备执行完相应的操作后,需要返回执行结果。此时设备并不直接返回执行结果,因为此时操作系统认为设备执行了一条写命令,而不是一条私有命令,底层设备此时返回的结果是写命令的结果,而不是私有命令的结果。所以不管私有命令执行是否正确,底层设备都返回GOOD。
在底层设备返回GOOD状态之前,底层设备将私有命令(即密码验证)的执行结果和额外的返回数据(如果有的话)写入到事先约定好的临时文件A。(临时文件A是上层软件与底层设备事先约定好的数据交换区。当然,只要上层软件能够知道底层设备写数据的区域,并且能够读出来,则底层设备写数据的区域并不限于临时文件A)
如本次密码校验错误,密码校验次数还剩下10次,设备就可以在临时文件A里写“0x01,0x0a”,设备再返回GOOD状态。
当然,也有可能返回BAD。例如底层设备正处于写保护的时候,操作系统发送写命令,此时设备就应该返回BAD,并在随后的REQUEST SENSE中报告写保护。
需要进一步说明的是,并不一定只有在返回GOOD状态之前才能写私有命令的执行结果,只要能保证在上层软件读到临时文件A之前更新临时文件A的内容即可,所以也可以在操作系统发读命令的时候才去更新。
然后,由于上层软件在调用操作系统的写文件功能(如Writefile())后,函数会有返回成功或者失败(GOOD/BAD),所以操作系统将GOOD的状态返回给上层软件。
上层软件收到GOOD状态以后,知道底层设备已经处理过私有命令。此时上层软件再调用系统的读函数(如ReadFile)去读临时文件A,将会读到数据“0x01,0x0a”。如此上层软件就知道此次密码校验错误,密码校验次数还剩10次。
需要特别注意的是,因为操作系统对磁盘设备是有缓存的,所以必须在读临时文件A的时候,指定采用非缓存方式读取,否则有可能读到的内容是操作系统的缓存,而不是真正的临时文件A。
此处,还有另一种解决方法,可以使得上层软件即使不采用非缓存方式读取,也可以保证读取到临时文件A是最新的。所述解决方法就是在底层设备执行完私有命令,并返回状态GOOD以后,向操作系统报告介质切换。
例如,当采用USB Mass storage协议里的SCSI命令簇时,操作系统在发送读命令前会先发送Test Unit Ready命令,以确保底层设备已准备好,可以进行操作。
因此底层设备可以在执行完私有命令并返回状态后,在接收到第一个TestUnit Ready命令时报告未准备好(即将CSW的状态位置为1),操作系统收到CSW的状态位为1,就会发送Request Sense命令,以取得错误细节,此时底层设备报告介质切换(Sense Code=0x02,Additional Sense Key=0x28),操作系统将会认为这个介质是新介质,就会重新读取底层设备的文件系统,也就会更新临时文件A的内容。这样上层软件即使不采用非缓存方式读取,也可以保证读取到临时文件A是最新的。
需要进一步说明的是,本实施例中提到的打包的方法以及数据的格式等都只是举例,实际操作中不限于此。例如可以在打包的文件和返回的数据里加入标示本命令的标志符,这样上层软件读取临时文件A发现标志符不对,就知道临时文件A的内容没有更新,现在临时文件A的数据不是实际本命令的返回数据。这样就不会导致上层软件与底层设备之间的通信错位。
本实施例中的临时文件A,是事先约定的底层设备和上层软件通信的通道,文件的内容在每次执行完私有命令以后都会更新。但如果不是通过写文件的方式来发送私有命令,而是通过SCSI标准通道来发送私有命令,则上层软件无需读取临时文件A也能取得返回数据,此时底层设备就无需更新临时文件A的内容了。
此外,由于本发明方法因为可以取得大量的底层设备的返回数据,所以还可以实现隐藏盘的访问,其原理与上述实施例类似,此不赘述。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1、一种主机与设备进行数据交换的方法,包括:
1)所述主机的上层软件向与所述主机连接的设备发出命令;
2)所述设备执行命令并向所述上层软件返回状态信息;
其特征在于,还包括步骤:
3)使用数据包存放命令执行结果数据;
4)上层软件根据所述状态信息读取数据包,获得所述执行结果数据。
2、根据权利要求1所述的主机与设备进行数据交换的方法,其特征在于:所述数据包是建立在所述主机的存储单元中的文件,所述存储单元是易失或非易失的。
3、根据权利要求1所述的主机与设备进行数据交换的方法,其特征在于:在所述步骤1)之前或者在所述步骤2)之前或者在所述步骤3)之前建立所述数据包。
4、根据权利要求1所述的主机与设备进行数据交换的方法,其特征在于:所述状态信息取值固定,用于向上层软件发出信号,表示所述执行结果数据已存入在数据包中,所述数据包可供上层软件读取。
5、根据权利要求1所述的主机与设备进行数据交换的方法,其特征在于:
所述状态信息取值根据所述命令执行情况变化,用于向上层软件发出信息,表示所述命令执行情况和/或是否产生执行结果数据;
对于执行所述命令产生了执行结果数据的情况,所述状态信息表明所述执行结果数据已存放在数据包中,所述数据包可供主机读取;
对于执行所述命令未产生执行结果数据的情况,所述状态信息表明没有产生数据包或数据包中没有存放执行结果数据,所述主机无需读取数据包。
6、根据权利要求1所述的主机与设备进行数据交换的方法,其特征在于:
所述步骤1)包括:
11)所述上层软件将待发送的命令和数据加上标志符,建立数据包;
12)所述上层软件启动操作系统的写文件命令,将前述数据包转发至所述底层设备;
所述步骤2)包括:
21)所述底层设备接收前述写文件命令,解析接收的数据包;
22)所述底层设备执行前述数据包中的命令;
23)所述底层设备向操作系统返回状态值;
所述步骤3)包括:
31)所述底层设备将命令执行的结果和/或返回的数据,写入存储单元的数据交换区;
所述步骤4)包括:
41)所述操作系统向上层软件转发状态值;
42)所述上层软件读取存储单元的数据交换区,得到命令执行的结果和/或返回的数据。
7、根据权利要求6所述的主机与设备进行数据交换的方法,其特征在于,所述步骤42)具体包括:所述上层软件启动操作系统的读文件命令,采用非缓存方式读取所述存储单元的数据交换区,得到命令执行的结果和/或返回的数据。
8、根据权利要求6所述的主机与设备进行数据交换的方法,其特征在于,所述步骤42)具体包括:所述上层软件启动操作系统的读文件命令;操作系统在发送读命令前发送状态查询命令;底层设备报告介质切换;操作系统重新读取底层设备的文件系统,更新数据交换区的内容;上层软件得到命令执行的结果和/或返回的数据。
9、根据权利要求6所述的主机与设备进行数据交换的方法,其特征在于:所述步骤21)中,还包括当底层设备解析到数据包中没有标志符时,丢弃此数据包。
10、根据权利要求6所述的主机与设备进行数据交换的方法,其特征在于:所述步骤23)中,返回的数据包括标志符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200410048629XA CN100470487C (zh) | 2004-06-04 | 2004-06-04 | 一种主机与底层设备进行数据交换的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200410048629XA CN100470487C (zh) | 2004-06-04 | 2004-06-04 | 一种主机与底层设备进行数据交换的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1707436A true CN1707436A (zh) | 2005-12-14 |
CN100470487C CN100470487C (zh) | 2009-03-18 |
Family
ID=35581373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200410048629XA Expired - Lifetime CN100470487C (zh) | 2004-06-04 | 2004-06-04 | 一种主机与底层设备进行数据交换的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100470487C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681818A (zh) * | 2016-12-29 | 2017-05-17 | 北京奇虎科技有限公司 | 一种安卓底层系统事件的传递方法和装置 |
CN107220133A (zh) * | 2017-05-27 | 2017-09-29 | 郑州云海信息技术有限公司 | 一种数据交互方法、装置及系统 |
CN107992372A (zh) * | 2017-12-13 | 2018-05-04 | 郑州云海信息技术有限公司 | 一种机箱信息交互方法、系统、设备及计算机存储介质 |
-
2004
- 2004-06-04 CN CNB200410048629XA patent/CN100470487C/zh not_active Expired - Lifetime
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106681818A (zh) * | 2016-12-29 | 2017-05-17 | 北京奇虎科技有限公司 | 一种安卓底层系统事件的传递方法和装置 |
CN106681818B (zh) * | 2016-12-29 | 2021-06-18 | 北京奇虎科技有限公司 | 一种安卓底层系统事件的传递方法和装置 |
CN107220133A (zh) * | 2017-05-27 | 2017-09-29 | 郑州云海信息技术有限公司 | 一种数据交互方法、装置及系统 |
CN107992372A (zh) * | 2017-12-13 | 2018-05-04 | 郑州云海信息技术有限公司 | 一种机箱信息交互方法、系统、设备及计算机存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100470487C (zh) | 2009-03-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6910131B2 (ja) | 多重モード動作のための多重パーティションを含む格納装置、及びその動作方法 | |
JP7404442B2 (ja) | 格納媒体を多重モードで動作させる管理システム、それを含む格納システム、及びそれを利用して格納媒体を管理する方法 | |
CN1866224A (zh) | 一种移动存储装置及存取移动存储装置中加密数据的方法 | |
CN100347692C (zh) | San系统中虚拟化智能控制器的实现方法 | |
JP5068754B2 (ja) | 改良されたホストインターフェイス | |
CN109726138A (zh) | 数据储存装置以及非挥发式存储器操作方法 | |
CN1147793C (zh) | 使用半导体存储设备的数据安全存取方法和系统 | |
CN1687916A (zh) | 通用串行总线数据传输方法及其设备 | |
CN1889426A (zh) | 一种实现网络安全存储与访问的方法及系统 | |
US20120191897A1 (en) | Non-volatile memory system and management method thereof | |
CN101056175A (zh) | 磁盘阵列及其访问权限控制方法与装置、服务器及服务器系统 | |
CN101038611A (zh) | 一种软件保护的方法 | |
CN1869855A (zh) | 一种usb海量存储设备上应用程序与usb海量存储设备进行命令交互和双向数据传输的方法 | |
CN1619510A (zh) | 移动存储装置的数据管理方法 | |
CN101051291A (zh) | 一种智能卡与u盘复合设备及其通过认证程序控制闪存读写的方法 | |
CN1866225A (zh) | 一种移动存储设备的映射方法 | |
CN1896960A (zh) | 一种快照系统及方法 | |
CN1679101A (zh) | 数字权力管理数据的入口点 | |
CN1687899A (zh) | 将应用程序动态下载到用户识别模块的方法、系统及模块 | |
CN1353370A (zh) | 微型机算计及其控制方法 | |
CN102236609B (zh) | 存储设备及其访问方法 | |
CN1925402A (zh) | iSCSI鉴权方法、其发起设备和目标设备及鉴权方法 | |
CN101059785A (zh) | 一种利用dma控制器实现二维数据搬运的方法 | |
CN1707436A (zh) | 一种主机与设备进行数据交换的方法 | |
CN1841329A (zh) | 对目标文件进行定位的方法和装置 |
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 |