一种实现hid/scsi设备pc/sc接口的系统和方法

文档序号:6464636阅读:330来源:国知局
专利名称:一种实现hid/scsi设备pc/sc接口的系统和方法
技术领域
本发明涉及通信安全领域,特别涉及一种实现HID/SCSI设备PC/SC接口的系统和方法。
技术背景HID (Human Interface Device,人机接口设备)设备是一种不需要用户再开发任何驱动, 插入支持windows等操作系统的计算机就能使用的设备,所有的HID设备都是通过操作系统 自带的HID设备类驱动(如,windows下的hidclass.sys)与各种应用建立联系,应用层程 序只需要调用现有的应用层接口 HID API (Application Programming Interface,应用程序 编程接口)就能访问HID设备,正是针对这一特性,HID设备提供商只需要给用户提供物理 设备就能满足一般的应用。但是,随着技术的发展,HID设备的种类也越来越多,例如针对 应用于智能卡领域的HID设备,由于各类操作系统自带的HID设备类驱动(hidclass.sys) 并没有提供协议处理器部分的功能,不能直接通过智能卡服务系统传输数据,应用访问HID 物理设备时,只能调用HID API访问HID设备,因此,仅仅提供HID物理设备不能使之完成 智能卡的功能。另外,SCSI (Small Computer System Interface,小型主机系统接口)是主机连接外设 备的一种接口标准,能够提供更高的数据传输率。SCSI为方便开发者使用预留了接口指令, 为完成接外设备的SCSI通讯,开发者将SCSI接口指令设计成接外设备的命令,以完成接外 设备的功能,但是在Windows 2000及以上操作系统下,普通用户没有权限使用SCSI接口指 令,这就给SCSI设备的使用带来了很多的不便。PC/SC (Personal Computer/ SmartCard,个人电脑/智能卡)规范是由微软公司与世界 其它著名的智能卡厂商组成的PC/SC工作组提出的一个基于windows平台的一个标准用户接 口 (API),提供了一个从个人电脑PC到智能卡SC的整合环境,应用程序通过该标准用户接 口与智能卡进行通讯。由于Windows操作系统内置了 PC/SC驱动程序,主机程序无需任何修 改就可以直接使用符合PC/SC规范的硬件设备。但是这种方式只限于符合PC/SC规范的硬件 设备。现在的硬件设备能够实现的功能多样而独特,越来越多的软/硬件开发人员使用自行开 发的驱动程序来操作硬件,以使该硬件设备具有特别功能,或者将硬件设备设计为非PC/SC规范的,利用系统集成的对应的驱动程序来操作硬件设备,来避免在操作系统中安装驱动程 序,方便部署。通常,无驱产品中的HID/SCSI类设备都是使用的计算机操作系统自带的驱动 进行访问,虽然这种方式的便利是不再随硬件设备派发驱动程序,可是,在某些场合下,我 们需要PC/SC接口方式使用该HID/SCSI类的硬件设备(比如,利用该HID/SCSI类的硬件设 备实现远程服务器的域登陆功能等)。面对这种需求,通常会采用构造一个PC/SC驱动利用操 作系统HID/SCSI接口协议实现访问HID/SCSI设备。现有技术中,通过HID协议处理单元和 SCSI协议处理单元,将HID/SCSI接口指令放在操作系统的内核级的PC/SC驱动程序中,该 PC/SC驱动程序又置于计算机内核程序中,因此在PC/SC驱动程序运行时, 一旦出错,很容 易导致整个操作系统的崩溃,当出现新的HID/SCSI设备时,只有修改PC/SC驱动程序才能得 到计算机程序的支持,修改调试PC/SC驱动程序的过程烦琐,且不易维护,修改PC/SC驱动 程序需要花费大量的时间和精力,且容易造成一旦修改不善,将导致整个操作系统崩溃。发明内容鉴于现有技术的不足,本发明提供了一种实现HID/SCSI设备PC/SC接口的系统和方法, 在本发明中,通过位于应用层的伺服模块实现对HID/SCSI设备的灵活支持,从而满足实现 应用程序与HID/SCSI设备的数据通信,具体实现技术方案,如下。一方面,提供了一种实现HID/SCSI设备PC/SC接口的系统,该系统包括伺服模块、PC/SC 驱动模块、设备管理模块和应用程序模块;所述伺服模块,用于将计算机获取的所述HID/SCSI设备的信息上报给所述PC/SC驱动模 块,并提供所述HID/SCSI设备和所述PC/SC驱动模块之间的数据交互通道;所述PC/SC驱动模块,用于将所述伺服模块报告的所述HID/SCSI设备的信息,上报给所 述设备管理模块,并提供所述伺服模块和所述设备管理模块之间的数据交互通道;所述设备管理模块,用于将所述PC/SC驱动模块报告的所述HID/SCSI设备的信息,上报 给所述应用程序模块;并向所述应用程序模块提供访问所述HID/SCSI设备的接口信息;所述应用程序模块,用于根据所述设备管理模块报告的所述HID/SCSI设备的信息和提供 的访问所述HID/SCSI设备的接口信息,访问所述HID/SCSI设备。其中,所述伺服模块位于所述系统的应用层,所述伺服模块包括伺服函数库单元和监 控单元;伺服函数库单元,用于通过提供HID接口设备描述符/SCSI接口设备描述符,进行 HID/SCSI协议处理,获取所述HID/SCSI设备的信息及实现数据交互;其中,所述HID接口设备描述符,用于向所述计算机声明设备类型具体为HID设备类型,并解析处理HID命令, 所述SCSI接口设备描述符,用于向所述计算机声明设备类型具体为SCSI设备类型,并解析 处理SCSI命令;监控单元,用于监控所述HID/SCSI设备和所述计算机的连接状态。其中,在获取所述HID/SCSI设备和所述计算机的连接状态实现时,可以采用回调函数的 方式和注册表监控方式,相应地,所述监控单元具体为第一监控子单元,用于实现所述伺服模块所提供的伺服程序通过所述回调函数获取所述 HID/SCSI设备与所述计算机的连接状态;或,第二监控子单元,用于监控注册表,实现所述伺服模块所提供的伺服程序通过对所述注 册表指定位置的监控获取所述HID/SCSI设备与所述计算机的连接状态。其中,所述伺服函数库单元至少为一个,当所述伺服函数库单元为多个时,每个伺服函 数库单元用于通过各自提供的HID接口设备描述符/SCSI接口设备描述符,进行HID/SCSI协 议处理,获取各自对应的HID/SCSI设备的信息及实现数据交互。进一步地,所述设备管理模块还包括缓冲存储单元,所述缓冲存储单元用于缓存系统 当前可用的智能卡SC协议处理器的标识。另一方面,提供了一种实现HID/SCSI设备PC/SC接口的方法,该方法包括位于计算机应用层的伺服程序创建内核对象并加载伺服函数库,所述伺服函数库将创建 的内核对象发送给PC八SC驱动程序;当所述伺服程序获知HID/SCSI设备与所述计算机建立连接后,通过所述PC/SC驱动程序 向计算机设备管理程序上报所述HID/SCSI设备的信息;所述计算机设备管理程序根据所述HID/SCSI设备的信息,判断所述HID/SCSI设备符合 访问要求后,所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备 的指令,通过所述内核对象发送给所述伺服程序;所述伺服程序接收所述访问指令,调用伺服函数库,获取所述伺服函数库中调用HID/SCSI 接口指令的代码信息;所述应用程序通过所述PC/SC驱动程序和伺服程序,经PC/SC接口对所述HID/SCSI设 备进行访问。其中,该方法中位于计算机应用层的伺服程序创建内核对象并加载伺服函数库之前,还 包括计算机启动,加载PC/SC驱动程序信息至计算机内存;计算机设备管理程序从所述计算机内存获取系统中的PC/SC驱动程序信息; 所述PC/SC驱动程序向所述设备管理程序注册协议处理器的标识; 相应地,所述判断所述HID/SCSI设备符合访问要求,具体为根据所述HID/SCSI设备的信息中携带的HID/SCSI设备的协议处理模块的标识,判断所 述标识是否和注册的标识匹配,如果是,则所述HID/SCSI设备符合访问要求;否则,所述 HID八SCSI设备不符合访问要求。其中,经PC/SC接口对所述HID/SCSI设备进行访问的步骤之后,所述方法还包括所述计算机中的应用层的伺服程序获取HID/SCSI设备中的数据,通过内核对象将所述数 据发送给所述PC/SC驱动程序;所述PC/SC驱动程序通过所述设备管理程序将所述HID/SCSI设备中的数据发送给所述 应用程序。其中,上述经PC/SC接口对所述HID/SCSI设备进行访问具体为 打开与所述HID/SCSI设备的连接;或, 关闭与所述HID/SCSI设备的连接;或, 获取所述HID/SCSI设备的复位应答(即ATR);或, 与所述HID/SCSI设备进行APDU交互。上述本发明实施例提供的方法中,所述伺服函数库为多个时,每个伺服函数库用于通过 各自提供的HID接口设备描述符/SCSI接口设备描述符,进行HID/SCSI协议处理,获取各自 对应的HID/SCSI设备的信息,实现数据交互。进一步地,所述伺服程序加载所述伺服函数库的方法还可以为创建文件对象方式; 相应地,所述位于计算机应用层的伺服程序创建内核对象并加载伺服函数库,所述伺服 函数库将创建的内核象发送给PC/SC驱动程序的步骤,具体为位于计算机应用层的伺服程序创建文件对象并加载伺服函数库,所述伺服函数库将创建的文件对象发送给PC/SC驱动程序;相应地,所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备的指令,通过所述内核对象发送给伺服程序的步骤,具体为所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备的指令, 通过所述文件对象发送给伺服程序;相应地,所述位于计算机应用层的伺服程序创建文件对象并加载伺服函数库之前,还包括计算机启动加载PC/SC驱动程序信息至计算机内存;计算机设备管理程序从计算机内存获取系统中的PC/SC驱动程序信息; 所述PC/SC驱动程序向所述设备管理程序注册协议处理器的标识。当采用创建文件对象方式,实现伺服程序加载所述伺服函数库时,相应地,方法还包括: 计算机中的应用层的伺服程序获取HID/SCSI设备中的数据,通过文件对象将所述数据发 送给所述PC/SC驱动程序;所述PC/SC驱动程序通过所述设备管理程序将所述HID/SCSI设备中的数据发送给所述 应用程序。所述伺服程序向计算机设备管理程序上报所述HID/SCSI设备的信息之前,还包括所述 伺服程序监控所述HID/SCSI设备与所述计算机的连接状态,具体方法为 通过回调函数的方式;或, 通过注册表监控的方式。相应地,当采用回调函数的方式时,所述伺服程序通过所述回调函数获取所述HID/SCSI 设备与所述计算机的连接状态;或;当采用通过注册表监控的方式时,所述伺服程序通过对所述注册表指定位置的监控获取 所述HID/SCSI设备与所述计算机的连接状态。本发明实施例提供的技术方案的有益效果是通过将HID/SCSI接口指令从PC/SC驱动程序中分离出来,利用伺服模块来调用HID/SCSI 接口指令,为计算机提供了一条访问HID/SCSI设备的通道,进而实现HID/SCSI设备通过PC/SC 接口与计算机进行通信的过程,由于伺服模块中的伺服程序运行在系统应用层,因此伺服程 序的编写、修改以及维护都较为简单,伺服程序的运行过程中发生错误,不会导致整个系统 的崩溃;当需要支持新的HID/SCSI设备时,只需通过更换伺服程序就可以实现计算机系统对 新设备的兼容,大大增强了系统的柔韧性和扩展性。另外,设计人员可以利用伺服函数库的 功能使程序不至于太过巨大,比如,多个应用程序可以共享伺服函数库中的函数,其中,伺 服函数库以一种自然的方式将一个大的应用程序划分为几个小的部分,有利于内部的分工与 合作,各个部分可以独立升级等等。


图l是本发明实施例1提供的实现HID/SCSI设备PC/SC接口的系统的工作结构图; 图2是本发明实施例2提供的实现HID/SCSI设备PC/SC接口的系统的工作结构图;图3是本发明实施例3提供的实现HID/SCSI设备PC/SC接口的设备的结构图; 图4是本发明实施例4提供的实现HID/SCSI设备PC/SC接口的方法流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进 一歩地详细描述,但不作为对本发明的限定。实施例1本发明实施例提供了一种实现HID/SCSI设备PC/SC接口的系统,本实施例中,该系统具 体为计算机l,其中,HID/SCSI设备具体以USB Token为例进行说明,其中,该USB Token 为一种USB (Universal Serial BUS,通用串行总线)接口的硬件设备,通过USB口实现与 电脑相连接,该USB Token内嵌芯片,可将信息安全地储存在该内嵌芯片中,且该USB Token 内置协议处理器,无需单独的读卡器,只要插入到计算机、键盘及显示器的USB接口上,即 可实现该USB Token的使用。参见图1,其中,计算机1包括伺服模块11、 PC/SC驱动模块12、设备管理模块13、应用程序模块14;USB Token 2包括USB接口模块21、协议处理模块22、智能卡芯片模块23。如前文所 述,该USB Token 2为HID/SCSI接口的设备;下面将详细针对上述各功能模块的作用进行说明针对USB Token 2而言,其中,USB接口模块21用于实现USB Token 2和计算机1的连接,在本实施例中,USB接口模 块21实现时,可以采用USB接口芯片;协议处理模块22用于与智能卡芯片模块23中运行的卡操作系统进行数据交互,获取智 能卡芯片模块23中的数据信息;智能卡芯片模块23用于存储用户的密钥、数字证书及密文信息等数据,利用智能卡芯片 模块23内置的密码学算法能够实现对用户身份的认证;其中,该智能卡芯片模块23具体设 计实现时,可以为基于安全设计的智能卡芯片。针对计算机l而言,其中,伺服模块ll,用于将USB Token 2的信息报告给PC/SC驱动模块,并为上下两层模块间 的数据交互提供通道,该伺服模块位于计算机的应用层;其中,该伺服模块11具体可以包括伺服函数库单元111和监控单元112:该伺服模块11通过调用伺服函数库单元111来获取HID/SCSI设备的信息(本实施例具 体为USB Token 2的信息)及实现数据交互;监控单元112,用于监控USB Token 2与计算机模块的连接状态;可以通过该监控单元 112获知,该USB Token 2是否与计算机模块建立了连接。如图1所示,其中,伺服函数库单元111包含HID协议处理区和SCSI协议处理区,HID 协议处理区用于进行HID协议处理,获取HID设备的信息和实现数据交互,HID协议处理区 内置有HID接口设备描述符,用于向计算机1声明其自身为HID设备类型,并解析处理HID 命令;SCSI协议处理区用于进行SCSI协议处理,获取SCSI设备的信息及实现数据交互;SCSI 协议处理区内置有SCSI接口设备描述符,用于向计算机1声明其自身为SCSI设备类型,并 解析处理SCSI命令。上述,描述符是数据结果或信息的格式化块,用于使计算机1获知USB Token 2的具体 设备类型(如,HID设备类型或SCSI设备类型),其中,每个描述符包含了关于USBToken 2 的整体信息或者一个元素的信息,具体如下-按照HID协议标准,符合HID接口标准的设备其描述符的特征是在接口描述符中,字 节0是描述符的字节长度,值为09h;字节l是描述符类型,值为04h;字节4是支持的终端号,值为01h;字节5是类代码,值为03h;字节6是子类代码,值为00h;字节7是协议代 码,值为00h。在类型描述符中,字节O是描述符的字节长度;字节1为HID类,值为21h;字节2是HID规范发布号,它采用二进制编码的十进制格式,比如1.0版本是0100h, l.l版 本是0110h。符合HID接口标准的设备的其它描述符中的字节,如设备描述符、配置描述符 中的字节以及上述接口描述符和类型描述符中的其它字节仍按照USB协议中的规定设备。按照SCSI协议标准,符合USB-SCSI接口标准的设备其描述符的特征是在接口描述符 中,字节O是描述符的字节长度,值为09h;字节l是描述符类型,值为04h;字节4是支持 的终端号;字节5是类代码,值为08h;字节6为子类代码,值为00h;字节7是协议代码, 值为50h。在类型描述符中,字节O是描述符的字节长度,字节2是SCSI规范的版本号。符 合SCSI接口标准的设备的其它描述符中的字节,如设备描述符、配置描述符中的字节以及上 述接口描述符和类型描述符中的其它字节仍按照USB协议中的规定设置。PC/SC驱动模块12,用于将通过伺服模块11获取的USB Token 2的信息报告给设备管理 模块13,并为上下两层模块的数据交互提供通道。设备管理模块13,用于将通过PC/SC驱动模块12获取的USB Token 2的信息报告给应 用程序模块14,并向应用程序模块14提供访问USB Token2的接口。其中,该设备管理模块是计算机1的系统组件,该设备管理模块13还包括缓冲存储单元131,该缓冲存储单元131 用于存储系统当前可用的PC/SC协议处理器的名称,即向系统注册的PC/SC协议处理器的名称。应用程序模块14,用于获取到通过设备管理模块13获取的USB Token2的信息后,访 问USB Token 2,与USB Token 2进行数据交互。其中,在获取HID/SCSI设备和计算机的连接状态实现时,可以采用回调函数的方式和注 册表监控方式,相应地,监控单元具体为第一监控子单元,用于实现伺服程序通过回调函数获取HID/SCSI设备与计算机的连接状 态;或,第二监控子单元,用于监控注册表,实现伺服程序通过对注册表指定位置的监控获取 HID/SCSI设备与计算机的连接状态。综上所述,本发明实施例提供的实现HID/SCSI设备PC/SC接口的系统,将HID/SCSI接 口指令从PC/SC驱动程序中分离出来,通过伺服模块来调用HID/SCSI接口指令,为计算机提 供了一条访问HID/SCSI设备的通道,进而实现HID/SCSI设备通过PC/SC接口与计算机进行 通信的过程,由于伺服模块中的伺服程序运行在系统应用层,因此伺服程序的编写、修改以 及维护都较为简单,伺服程序的运行过程中发生错误,不会导致整个系统的崩溃;当需要支 持新的HID/SCSI设备时,只需通过更换伺服程序就可以实现计算机系统对新设备的兼容,大 大增强了系统的柔韧性和扩展性。另外,设计人员可以利用伺服函数库的功能使程序不至于 太过巨大,比如,多个应用程序可以共享伺服函数库中的函数,其中,伺服函数库以一种自 然的方式将一个大的应用程序划分为几个小的部分,有利于内部的分工与合作,各个部分可 以独立升级等等。实施例2如图2所示,本发明实施例提供了一种通过使用不同的伺服模块实现对多个USB Token 进行访问的系统,与实施例l的区别在于,在本实施例中,伺服模块ll包括多个伺服函数库单元。计算机1通过调用不同的伺服函数库单元来实现与多个USB Token的数据通信,每个伺 服函数库单元中都包括各自独立的HID协议处理区和SCSI协议处理区。如图2所示,在本实施例中,第一伺服函数库单元关联USB Tokenl、第二伺服函数库 单元关联USB Token2、第三伺服函数库单元关联USB Token3,伺服模块伺服函数库单元分别与不同的USB Token进行数据通信。相应地,监控单元的作用是监控各USB Token和计算机的连接状态。综上所述,本发明实施例提供的系统,进一步地实现了系统对多个USB Token进行访问的功能,提高了系统的访问性能,方便了用户的操作使用。实施例3参见图3,本发明实施例提供了一种实现HID/SCSI设备PC/SC接口的设备,与本发明实 施例l提供的系统相应,该设备包括伺服模块ll、 PC/SC驱动模块12、设备管理模块13、 应用程序模块14;下面将详细针对上述各功能模块的作用进行说明伺服模块ll,用于将USB Token 2的信息报告给PC/SC驱动模块,并为上下两层模块间 的数据交互提供通道,该伺服模块位于该设备的应用层。其中,该伺服模块11具体可以包括:伺服函数库单元111和监控单元112:该伺服模块11通过调用伺服函数库单元111来获取HID/SCSI设备的信息(本实施例具 体为USB Token 2的信息)及实现数据交互;监控单元112,用于监控USB Token 2与该设备的连接状态;可以通过该监控单元112 获知,该USB Token 2是否与该设备建立了连接。如图1所示,其中,伺服函数库单元111包含HID协议处理区和SCSI协议处理区,HID 协议处理区用于进行HID协议处理,获取HID设备的信息和实现数据交互,HID协议处理区 内置有HID接口设备描述符,用于向该设备1声明其自身为HID设备类型,并解析处理HID 命令;SCSI协议处理区用于进行SCSI协议处理,获取SCSI设备的信息及实现数据交互;SCSI 协议处理区内置有SCSI接口设备描述符,用于向该设备1声明其自身为SCSI设备类型,并 解析处理SCSI命令。上述,描述符是数据结果或信息的格式化块,用于使该设备l或获知USB Token 2的设 备类型(如,HID设备类型或SCSI设备类型),其中,每个描述符包含了关于USB Token 2 的整体信息或者一个元素的信息,具体如下按照HID协议标准,符合HID接口标准的设备其描述符的特征是在接口描述符中,字 节0是描述符的字节长度,值为09h;字节1是描述符类型,值为04h;字节4是支持的终端号,值为01h;字节5是类代码,值为03h;字节6是子类代码,值为00h;字节7是协议代码,值为00h。在类型描述符中,字节0是描述符的字节长度;字节1为HID类,值为21h; 字节2是HID规范发布号,它采用二进制编码的十进制格式,比如1.0版本是0100h, 1. l版本是0110h。符合HID接口标准的设备的其它描述符中的字节,如设备描述符、配置描述符 中的字节以及上述接口描述符和类型描述符中的其它字节仍按照USB协议中的规定设备。按照SCSI协议标准,符合USB-SCSI接口标准的设备其描述符的特征是在接口描述符 中,字节O是描述符的字节长度,值为09h;字节l是描述符类型,值为04h;字节4是支持 的终端号;字节5是类代码,值为08h;字节6为子类代码,值为00h;字节7是协议代码, 值为50h。在类型描述符中,字节O是描述符的字节长度,字节2是SCSI规范的版本号。符 合SCSI接口标准的设备的其它描述符中的字节,如设备描述符、配置描述符中的字节以及上 述接口描述符和类型描述符中的其它字节仍按照USB协议中的规定设置。其中,在获取HID/SCSI设备和计算机的连接状态实现时,可以采用回调函数的方式和注 册表监控方式,相应地,监控单元具体为第一监控子单元,用于实现伺服程序通过回调函数获取HID/SCSI设备与计算机的连接状 态;或,第二监控子单元,用于监控注册表,实现伺服程序通过对注册表指定位置的监控获取 HID/SCSI设备与计算机的连接状态。PC/SC驱动模块12,用于将通过伺服模块11获取的USB Token 2的信息报告给设备管理 模块13,并为上下两层模块的数据交互提供通道。设备管理模块13,用于将通过PC/SC驱动模块12获取的USB Token 2的信息报告给应 用程序模块14,并向应用程序模块14提供访问USB Token 2的接口。其中,该设备管理模 块是该设备1的系统组件,该设备管理模块13还包括缓冲存储单元131,该缓冲存储单元131 用于存储系统当前可用的PC/SC协议处理器的名称,即向系统注册的PC/SC协议处理器的名 称。应用程序模块14,用于获取到通过设备管理模块13获取的USB Token2的信息后,访 问USB Token 2,与USB Token 2进行数据交互。进一步地,本发明实施例提供的设备的伺服模块ll包括多个伺服函数库单元。通过调用 不同的伺服函数库单元来实现与多个USB Token的数据通信,每个伺服函数库单元中都包括 各自独立的HID协议处理区和SCSI协议处理区,监控单元的作用相应地,便是监控各USB Token和计算机的连接状态。从而,进一步地实现了设备对多个USB Token进行访问的功能, 提高了设备的访问性能,方便了用户的操作使用。综上所述,本发明实施例提供的实现HID/SCSI设备PC/SC接口的设备,将HID/SCSI接 口指令从PC/SC驱动程序中分离出来,通过伺服模块来调用HID/SCSI接口指令,为该设备提供了一条访问HID/SCSI设备的通道,进而实现HID/SCSI设备通过PC/SC接口与该设备进行 通信的过程,由于伺服模块中的伺服程序运行在系统应用层,因此伺服程序的编写、修改以 及维护都较为简单,伺服程序的运行过程中发生错误,不会导致整个系统的崩溃;当需要支 持新的HID/SCSI设备时,只需通过更换伺服程序就可以实现该设备系统对新设备的兼容,大 大增强了系统的柔韧性和扩展性。另外,设计人员可以利用伺服函数库的功能使程序不至于 太过巨大,比如,多个应用程序可以共享伺服函数库中的函数,其中,伺服函数库以一种自 然的方式将一个大的应用程序划分为几个小的部分,有利于内部的分工与合作,各个部分可 以独立升级等等。实施例4参见图4,本发明实施例提供了一种实现HID/SCSI设备PC/SC接口的方法,与本发明实 施例l提供的系统相应,本实施例中,HID/SCSI设备仍以USB Token为例进行说明,其中, 该USB Token为一种USB (Universal Serial BUS,通用串行总线)接口的硬件设备,通过 USB 口为其与电脑相连接,该USB Token内嵌芯片,可将信息安全地储存在该内嵌芯片中, 且该USB Token内置协议处理器无需单独的读卡器,只要插入到计算机、键盘及显示器的USB 接口上,即可实现该USB Token的使用。该方法内容如下步骤401:计算机启动,加载PC/SC驱动程序信息至计算机内存;其中,该步骤中,本领域技术人员可以获知,在计算机启动的时候,会加载操作系统运 行的相关程序,由于PC/SC驱动程序位于操作系统的内核程序中,所以同样会实现该PC/SC 驱动程序的加载,于是,在计算机启动时实现加载PC/SC驱动程序至计算机内存。 步骤40'2:设备管理程序从计算机内存获取系统中的PC/SC驱动程序信息; 其中,由于在步骤401中计算机内存中己经保存了加载成功的PC/SC驱动程序信息,即 该加载成功的PC/SC驱动程序信息具体为在操作系统中进行注册的PC/SC驱动程序信息,该 歩骤402在具体实现时,可以通过设备管理程序采用枚举计算机内存中的驻留的各程序的形 式,获取到所需要的该PC/SC驱动程序信息。步骤403: PC/SC驱动程序向设备管理器中的设备管理程序注册协议处理器的名称; 其中,该步骤是为了确保后续只有匹配了在该设备管理程序中注册的协议处理器的USB Token,才能实现数据的读取操作。为了便于说明,本发明实施例以PC/SC驱动程序向设备管理程序注册协议处理器的名称 为USB Token的协议处理器名称为例,即本发明实施例提供的USB Token的协议处理器符合该计算机的读取数据的要求。步骤404:伺服程序初始化,创建内核对象加载伺服函数库,并伺服函数库将内核对象 下发给PC/SC驱动程序。该伺服程序位于计算机系统的应用层;步骤405:监控程序判断USB Token是否与计算机建立连接,如果是,则执行步骤406; 否则,执行步骤416;其中,在该歩骤中判断USB Token是否与计算机建立连接可以采用如下的方式 采用回调函数的方式,实现伺服程序通过回调函数获取HID/SCSI设备与计算机的连接状态;采用监控注册表的方式,通过监控注册表,实现伺服程序通过对注册表指定位置的监控获取HID/SCSI设备与计算机的连接状态。本发明实施例不限制实现判断USB Token是否与计算机建立连接时所采用的具体方式。 歩骤406:伺服程序将USB Token的信息报告给PC/SC驱动程序; 其中,在步骤406中,USB Token的信息主要为USB Token中协议处理器的信息。 步骤407: PC/SC驱动程序将USB Token的信息报告给计算机系统的设备管理器; 由于伺服函数库在初始化过程中,首先创建内核对象,伺服函数库通过函数将内核对象下发给PC/SC驱动程序,以进行后续的数据交互。具体为-〃创建发送数据的内涵对象hEvents. hEventSnd = CreateEvent(NULL, FALSE, FALSE, 〃FTSmcSnd〃); 〃创建接受数据的内涵对象hEvents. hEventRcv = CreateEvent(NULL, FALSE, FALSE, 〃FTSmcRcv〃); 伺服函数库通过DeviceIoControl ()将内核对象下发给PC/SC驱动程序,以进行后续 的数据交互。 DeviceloControl (hFile, 〃设备句柄IOCTL—FTSMC—SET_EVENTS, 〃 10控制代码&hEvents, 〃输入缓冲区sizeof (FTSMC—SHARED_EVENTS), 〃输入数据长度NULL, 〃输出缓冲区0, 〃输出缓冲区大小.&dwReturn, 〃实际输出数据长度NULL );歩骤408:伺服程序等待内核对象以接收或发送指令数据; 〃驱动层设置事件,通知伺服程序,有数据下发,请接受KeSetEvent(hEventSnd' 0, FALSE); 〃伺服程序 while (true) {〃等待内核对象事件if (WAIT—OBJECT—0 + 1 == WaitForMultipleObjects(2, handles, FALSE, INFINITE))return 0; 〃退出〃获取内核驱动对象携带的数据ReadFile(g—hFile, g—snd, sizeof(g_snd), &dwRead, NULL); 〃根据内核对象携带的信息,对数据做不同的处理 Switch ( KernelFunc )Case 0:break;Default:break;〃将处理结果反馈给内核驱动对象WriteFile(g—hFile, g—rev, rcvLen, &dwWritten, NULL); 〃告知驱动对象,可以获取返回的数据了 SetEvent(hEventRcv);步骤409: PC/SC驱动程序接收到计算机的应用程序下发的访问USB Token的指令; 歩骤410: PC/SC驱动程序将应用程序下发的访问USB Token的指令通过内核对象报告给伺服程序;步骤411:伺服程序接收到访问USB Token的指令后,调用伺服函数库,运行伺服函数 库中的打开、启用、查询或关闭指令; 打开if( !InitFTSmcLib()) //初始化失败g—LibStatus = STATUS—LIB_INIT—FAILED; return FALSE;〃初始化成功g—LibStatus = STATUS_LIB—INIT—OK;启用if( !EnableFTSmcLib()) 〃操作失败g—LibStatus = STATUS—LIB—ENABLE—FAILED; return FALSE;〃操作成功g—LibStatus = STATUS—LIB—ENABLE—OK;查询if( !QureyFtSmcLib(szTokenVID, nStatus))〃査询指定的设备状态〃操作失败g_LibStatus = STATUS—LIB_QUERY—FAILED; return FALSE;6lS6〃操作成功g_LibStatus 二 STATUS_LIB_QUERY—OK;关闭-if( !FinalizeFTSmcLib()) 〃操作失败g—LibStatus = STATUS—LIB—CLOSE—FAILED; return FALSE;〃操作成功g_LibStatus = STATUS—LIB—CLOSE—OK;步骤412:伺服函数库向伺服程序提供调用HID/SCSI接口指令的代码; if( !TransmitFTSmcLib (pl叩ut, nl叩ut,pOutput, faiOutLen, nOpMode))〃操作失败g_LibStatus = STATUS—LIB—TRANSMIT—FAILED; return FALSE;else〃操作成功g—LibStatus = STATUS—LIB_TRANSMIT_OK;歩骤413:应用程序通过PC/SC驱动程序及伺服程序经PC/SC接口对USB Token进行访 问;其中,访问具体包括1) 打开与USB Token的连接;2) 关闭与USB Token的连接;3) 获取USB Token的复位应答,即ATR (Answer To Reset,响应复位);4) 与USB Token进行APDU交互。其中,APDU (Application Protocol Data Unit,应 用协议数据单元)在OSI参考模型的第七层,是应用层进行信息交换时所使用的基本信息单元。其中,打开与USB Token的连接时,可以采用如下方式SCardConnect(ContextHandle, 〃所述设备管理器上下文句柄strFTSmcReader, 〃所述PC/SC驱动名SCARD—SHARE—SHARED,〃访问模式SCARD—PROTOCOL—TO | SCARD—PROTOCOL—Tl, 〃通讯协议选择 &CardHandle, 〃返回的卡句柄&ActiVeProtocol); 〃返回的当前卡片应用协议关闭与USB Token的连接时,可以采用如下方式 SCardDisco皿ect(CardHandle, SCARD—EJECT—CARD); 获取USB Token的复位应答(取ATR)时,可以采用如下方式:SCardStatus(CardHandle,strFTSmcReader, &dwLength, &dwCardState, &dwActiveProtocol,〃卡句柄〃所述PC/SC驱动名 〃数据长度 〃卡状态〃当前协议pbyATR, 〃复位应答缓冲区ftckATRLength); 〃实际应答信息长度执行与USB Token进行APDU数据交互时,可以采用如下方式 SCardTransmit (CardHandle, //卡句柄&I0—Request, 〃 SCARD_I0—REQUEST信息(PUCHAR)SendData, 〃下发的指令缓冲区 nCmdLen , 〃指令缓冲区大小NULL, 〃返回的SCARD_IO_REQUEST信息(PUCHAR)ReceiveData, 〃接收数据缓冲区 toRespLen); 〃接收数据缓冲区大小步骤414:伺服程序获取USB Token中的数据后,通过内核对象将该数据传送给PC/SC驱 动程序;可以采用如下方式〃驱动层等待数据返回KeWaitForSingleObject ( hEventRcv, Executive, KernelMode, FALSE, pDueTime);〃驱动层数据返回后,将数据反馈给上层缓冲区RtlCopyMemory (......);〃步骤415: PC/SC驱动程序通过系统设备管理器将USB Token中数据传送给应用程序。 当USB Token与计算机建立联系后,通过上述步骤406至415实现了计算机的应用程序 和该USB Token的数据交互过程。步骤416:等待USB Token与主机建立连接。如图4所示,当等待到USB Token与主机建立连接后,执行步骤406至步骤415。 通过本实施例,具体说明了 HID/SCSI设备PC/SC接口的实现原理,其中,上述本发明实 施例在实现时,是采用伺服程序创建内核对象并加载伺服函数库实现的,本领域技术人员还可以获知,伺服程序还可以通过采用创建文件对象方式实现加载伺服函数库;当采用采用创 建文件对象方式实现时,相应地,位于计算机应用层的伺服程序创建内核对象并加载伺服函 数库,伺服函数库将创建的内核对象发送给PC/SC驱动程序的步骤,具体为位于计算机应用层的伺服程序创建文件对象并加载伺服函数库,伺服函数库将创建的文 件对象发送给PC/SC驱动程序;相应地,PC/SC驱动程序将接收的计算机应用程序下发的访问HID/SCSI设备的指令,通 过内核对象发送给伺服程序的歩骤,具体为PC'/SC驱动程序将接收的计算机应用程序下发的访问HID/SCSI设备的指令,通过文件对 象发送给伺服程序;相应地,位于计算机应用层的伺服程序创建文件对象并加载伺服函数库之前,还包括 计算机启动加载PC/SC驱动程序信息至计算机内存;计算机设备管理程序从计算机内存获取系统中的PC/SC驱动程序信息;PC/SC驱动程序向设备管理程序注册协议处理器的标识。当采用创建文件对象方式,实现伺服程序加载伺服函数库时,相应地,方法还包括计算机中的应用层的伺服程序获取HID/SCSI设备中的数据,通过文件对象将数据发送给PC/SC驱动程序;PC/SC驱动程序通过设备管理程序将HID/SCSI设备中的数据发送给应用程序。 综上所述,本发明实施例提供的实现HID/SCSI设备PC/SC接口的方法,通过将HID/SCSI 接口指令从PC/SC驱动程序中分离出来,利用伺服模块来调用HID/SCSI接口指令,为计算机 提供了一条访问HID/SCSI设备的通道,进而实现HID/SCSI设备通过PC/SC接口与计算机进 行通信的过程,由于伺服模块中的伺服程序运行在系统应用层,因此伺服程序的编写、修改 以及维护都较为简单,伺服程序的运行过程中发生错误,不会导致整个系统的崩溃;当需要 支持新的HID/SCSI设备时,只需通过更换伺服程序就可以实现计算机系统对新设备的兼容, 大大增强了系统的柔韧性和扩展性。另外,设计人员可以利用伺服函数库的功能使程序不至 于太过巨大,比如,多个应用程序可以共享伺服函数库中的函数,其中,伺服函数库以一种 自然的方式将一个大的应用程序划分为几个小的部分,有利于内部的分工与合作,各个部分 可以独立升级等等。实施例5相应与本发明实施例2所提供的实现HID/SCSI设备PC/SC接口的系统,本发明实施例提供了一种实现HID/SCSI设备PC/SC接口的方法,该方法中,在应用层伺服程序中通过设置多 个伺服函数库,不同的伺服函数库由同一个应用层伺服程序对其进行调用,每个伺服函数库 对应不同的USB Token,从而实现应用程序对多个USB Token的访问。其中,所谓的不同的 USB Token是指具有不同的其中具有不同的协议处理器名称的HID/SCSI设备。通过本发明实施例提供的方法,若要实现对不同的USB Token的访问,只需通过PC/SC驱 动程序向设备管理程序注册USB Token中相应协议处理器的名称,便可实现应用程序对不同 USB Token的访问,具体流程参见实施例3。本领域技术人员可以获知,由于PC/SC驱动程 序位于计算机系统的内核层,所以在实现向设备管理程序注册USB Token中相应协议处理器 的名称时,需要重新启动计算机。本发明实施例中的"接收" 一词可以理解为主动从其他模块获取也可以是接收其他模块 发送来的信息。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不 一定是实施本发明所必需的。本领域技术人员可以理解实施例中的系统(或设备)中的模块可以按照实施例描述分布 于实施例的系统(或设备)中,也可以进行相应变化位于不同于本实施例的一个或多个系统 (或设备)中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的 存储介质中,如光盘或硬盘等。
权利要求
1、一种实现HID/SCSI设备PC/SC接口的系统,其特征在于,所述系统包括伺服模块、PC/SC驱动模块、设备管理模块和应用程序模块;所述伺服模块,用于将计算机获取的所述HID/SCSI设备的信息上报给所述PC/SC驱动模块,并提供所述HID/SCSI设备和所述PC/SC驱动模块之间的数据交互通道;所述PC/SC驱动模块,用于将所述伺服模块报告的所述HID/SCSI设备的信息,上报给所述设备管理模块,并提供所述伺服模块和所述设备管理模块之间的数据交互通道;所述设备管理模块,用于将所述PC/SC驱动模块报告的所述HID/SCSI设备的信息,上报给所述应用程序模块;并向所述应用程序模块提供访问所述HID/SCSI设备的接口信息;所述应用程序模块,用于根据所述设备管理模块报告的所述HID/SCSI设备的信息和提供的访问所述HID/SCSI设备的接口信息,访问所述HID/SCSI设备。
2、 如权利要求1所述的系统,其特征在于,所述伺服模块位于所述系统的应用层,所述 伺服模块包括伺服函数库单元和监控单元;伺服函数库单元,用于通过提供HID接口设备描述符/SCSI接口设备描述符,进行 HID/SCSI协议处理,获取所述HID/SCSI设备的信息及实现数据交互;其中,所述HID接口 设备描述符,用于向所述计算机声明设备类型具体为HID设备类型,并解析处理HID命令; 所述SCSI接口设备描述符,用于向所述计算机声明设备类型具体为SCSI设备类型,并解析 处理SCSI命令;监控单元,用于监控所述HID/SCSI设备和所述计算机的连接状态。
3、 如权利要求2所述的系统,其特征在于,所述监控单元具体为 第一监控子单元,用于实现所述伺服模块所提供的伺服程序通过回调函数获取所述HID/SCSI设备与所述计算机的连接状态;或,第二监控子单元,用于监控注册表,实现所述伺服模块所提供的伺服程序通过对所述注 册表指定位置的监控获取所述HID/SCSI设备与所述计算机的连接状态。
4、 如权利要求2所述的系统,其特征在于,所述伺服函数库单元至少为一个, 当所述伺服函数库单元为多个时,每个伺服函数库单元用于通过各自提供的HID接口设备描述符/SCSI接口设备描述符,进行HID/SCSI协议处理,获取各自对应的HID/SCSI设备 的信息及实现数据交互。
5、 如权利要求1所述的系统,其特征在于,所述设备管理模块还包括缓冲存储单元,所述缓冲存储单元用于缓存系统当前可用的智能卡SC协议处理器的标识。
6、 一种实现HID/SCSI设备PC/SC接口的方法,其特征在于,所述方法包括位于计算机应用层的伺服程序创建内核对象并加载伺服函数库,所述伺服函数库将创建的内核对象发送给PC/SC驱动程序;当所述伺服程序获知HID/SCSI设备与所述计算机建立连接后,通过所述PC/SC驱动程序 向计算机设备管理程序上报所述HID/SCSI设备的信息;所述计算机设备管理程序根据所述HID/SCSI设备的信息,判断所述HID/SCSI设备符合 访问要求后,所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备 的指令,通过所述内核对象发送给所述伺服程序;所述伺服程序接收所述访问指令,调用伺服函数库,获取所述伺服函数库中调用HID/SCSI接口指令的代码信息;所述应用程序通过所述PC/SC驱动程序和伺服程序,经PC/SC接口对所述HID/SCSI设 备进行访问。
7、 如权利要求6所述的方法,其特征在于,所述位于计算机应用层的伺服程序创建内核对象并加载伺服函数库之前,还包括计算机启动,加载PC/SC驱动程序信息至计算机内存; 计算机设备管理程序从所述计算机内存获取系统中的PC/SC驱动程序信息; 所述PC/SC驱动程序向所述设备管理程序注册协议处理器的标识; 相应地,所述判断所述HID/SCSI设备符合访问要求,具体为根据所述HID/SCSI设备的信息中携带的HID/SCSI设备的协议处理器的标识,判断所述 标识是否和注册的标识匹配,如果是,则所述HID/SCSI设备符合访问要求;否则,所述 HID/SCSI设备不符合访问要求。
8、 如权利要求6所述的方法,其特征在于,所述方法还包括所述计算机中的应用层的伺服程序获取HID/SCSI设备中的数据,通过内核对象将所述数 据发送给所述PC/SC驱动程序;所述PC/SC驱动程序通过所述设备管理程序将所述HID/SCSI设备中的数据发送给所述 应用程序。
9、 如权利要求6所述的方法,其特征在于,所述经PC/SC接口对所述HID/SCSI设备进行访问具体为打开与所述HID/SCSI设备的连接;或,关闭与所述HID/SCSI设备的连接;或, 获取所述HID/SCSI设备的复位应答;或, 与所述HID/SCSI设备进行APDU交互。
10、 如权利要求6所述的方法,其特征在于,所述伺服函数库为多个时,每个伺服函数 库用于通过各自提供的HID接口设备描述符/SCSI接口设备描述符,进行HID/SCSI协议处理, 获取各自对应的HID/SCSI设备的信息,实现数据交互。
11、 如权利要求6所述的方法,其特征在于,所述伺服程序加载所述伺服函数库的方法 还可以为创建文件对象方式;相应地,所述位于计算机应用层的伺服程序创建内核对象并加载伺服函数库,所述伺服 函数库将创建的内核对象发送给PC/SC驱动程序的步骤,具体为位于计算机应用层的伺服程序创建文件对象并加载伺服函数库,所述伺服函数库将创建 的文件对象发送给PC/SC驱动程序;相应地,所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备 的指令,通过所述内核对象发送给伺服程序的步骤,具体为所述PC/SC驱动程序将接收的计算机应用程序下发的访问所述HID/SCSI设备的指令, 通过所述文件对象发送给伺服程序;相应地,所述位于计算机应用层的伺服程序创建文件对象并加载伺服函数库之前,还包括计算机启动,加载PC/SC驱动程序信息至计算机内存; 计算机设备管理程序从计算机内存获取系统中的PC/SC驱动程序信息; 所述PC/SC驱动程序向所述设备管理程序注册协议处理器的标识。
12、 如权利要求ll所述的的方法,其特征在于,所述方法还包括计算机中的应用层的伺服程序获取HID/SCSI设备中的数据,通过文件对象将所述数据发 送给所述PC/SC驱动程序;所述PC/SC驱动程序通过所述设备管理程序将所述HID/SCSI设备中的数据发送给所述 应用程序。
13、 如权利要求6所述的方法,其特征在于,所述伺服程序向计算机设备管理程序上报 所述HID/SCSI设备的信息之前,还包括所述伺服程序监控所述HID/SCSI设备与所述计算 机的连接状态,具体为所述伺服程序通过回调函数获取所述HID/SCSI设备与所述计算机的连接状态;和/或,所述伺服程序通过对所述注册表指定位置的监控,获取所述HID/SCSI设备与所述计算机的连接状态。
全文摘要
本发明公开了一种实现HID/SCSI设备PC/SC接口的系统和方法,属于通信安全领域。所述方法包括伺服程序创建内核对象并加载伺服函数库,将内核对象发送给PC/SC驱动程序;伺服程序通过PC/SC驱动程序向计算机设备管理程序上报HID/SCSI设备的信息;PC/SC驱动程序将接收的访问HID/SCSI设备的指令,通过内核对象发送给伺服程序;伺服程序接收访问指令,获取伺服函数库中调用HID/SCSI接口指令的代码信息;应用程序通过PC/SC驱动程序和伺服程序,经PC/SC接口对HID/SCSI设备进行访问。由于伺服程序运行在系统应用层,其编写、修改、维护简单,在其运行过程中发生错误不会导致整个系统的崩溃;当需要支持新的HID/SCSI设备时,只需更换伺服程序就可以实现对新设备的兼容,增强了系统的柔韧性和扩展性。
文档编号G06F13/42GK101329661SQ20081011748
公开日2008年12月24日 申请日期2008年7月31日 优先权日2008年7月31日
发明者于华章, 舟 陆 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1