一种使hid设备能提供智能卡接口的装置及方法

文档序号:6559259阅读:164来源:国知局
专利名称:一种使hid设备能提供智能卡接口的装置及方法
技术领域
本发明涉及在内核驱动中监控HID设备的装置及装置的工作方法,特别是指一种使HID设备能提供智能卡接口的装置及方法。
背景技术
WDM(Win32 Driver Mode,Win32驱动模型)是微软公司为Windows的驱动程序设计的一种通用的驱动程序模型。随着系统的升级,WDM已经成为Windows系统驱动程序开发的主流。WDM体系结构实行分层处理,即设备驱动被分成过滤驱动程序、功能驱动程序和总线驱动程序。每层驱动程序又把I/O请求划分成更简单的请求,以传给下层的驱动程序执行。总线驱动程序最后收到I/O请求后,通过硬件抽象层与硬件发生作用,从而完成I/O请求操作。
一般智能卡生产商通常除了要提供智能卡物理设备,还要提供相应的功能驱动程序,该功能驱动程序即可以作为读卡器接口与上层应用进行数据通讯,又可以通过与下层的总线驱动进行通讯,完成与硬件之间的数据读写。功能驱动程序的这两种功能即可以在一个功能驱动中实现,也可以根据需要设计成两个单独的驱动,一部分完成读卡器功能,一部分完成与硬件相关部分功能(以下统一称为智能卡设备功能驱动)。数据传输经过的顺序是应用发送数据时,数据依次经智能卡服务系统、智能卡设备功能驱动、总线驱动,到达智能卡物理设备。数据从硬件返回时,数据依次经总线驱动、智能卡设备功能驱动、智能卡服务系统到达应用。
在设计智能卡设备功能驱动时,需要在驱动中提供PC/SC回调函数接口,并在设备功能驱动中指定读卡器名称。回调函数大多由使用者自己定义名字,函数体是系统定义好的,回调函数的用法为使用者定义一个函数变量类型,然后定义一个这种类型的变量,并对这个变量赋值,再把变量作为参数传给调用者(一般为系统本身),调用者根据参数调用回调函数。
应用层通过使用智能卡服务的PC/SC接口,就能开始智能卡正常的通讯工作。这样设计出来的智能卡能实现智能卡的全部应用。
PC/SC规范是由微软公司与世界其它著名的智能卡厂商组成的PC/SC工作组提出的一个基于WINDOWS平台的一个标准用户接口(API),提供了一个从个人电脑(Personal Computer)到智能卡(SmartCard)的整合环境,应用程序通过该标准用户接口与智能卡进行通讯。
HID(human interface device,人机接口设备)设备是一种不需要用户再开发任何驱动插入windows操作系统就能使用的设备,所有的HID设备都是通过系统自带的HID设备类驱动(hidclass.sys)与应用建立联系,应用层程序只需要调用现有的应用层接口(HID API)就能访问HID设备,正是针对这一特性,HID设备提供商只需要给用户提供物理设备就能满足一般的应用。
但是,因为系统自带的HID设备类驱动(hidclass.sys)并没有提供读卡器部分的功能,不能直接通过智能卡服务系统传输数据,应用访问HID物理设备时,只能调用HID API访问HID设备。因此,仅仅提供HID物理设备不能使之完成智能卡的功能。

发明内容
为了解决HID设备不能直接应用于智能卡各个领域、实现智能卡功能的问题,本发明提供一种使HID设备能提供智能卡接口的装置及方法。
本发明一种使HID设备能提供智能卡接口的装置,为虚拟读卡器驱动层,该虚拟读卡器驱动层包括监控模块,用于监控HID设备的插入和拔除,获取HID设备对象的名称;PC/SC接口模块,对应用层提供标准符合PC/SC规范的驱动接口,接收从应用层发来的IRP,并将该IRP传递给数据处理模块。
数据处理模块,用来接收并处理通过PC/SC接口模块从应用层发来的IRP,根据监控模块获取的HID设备对象的名称向HID设备类驱动层发送IRP。
所述数据处理模块通过获取HID设备对象的方式,连接HID设备类驱动层。
所述装置的工作方法,包括监控步骤1)当有HID设备插入时,监控模块监控到HID设备的插入;2)监控模块获取下层HID设备对象的名称;3)监控模块判断插入的HID设备是否为需处理的HID设备;
4)监控模块初始化程序中的变量,并通知智能卡服务系统有智能卡插入;5)当拔除HID设备时,监控模块监控到HID设备的拔除,清空HID设备插入后占用的系统资源,并通知智能卡服务系统有智能卡拔除。
数据处理步骤1)数据处理模块接到应用层发来的与HID设备相关的IRP,并根据HID数据传输协议重新组装IRP;2)数据处理模块将重新组装的IRP发送到下层HID设备类驱动层进行数据交互,并将交互后的结果返回应用层。
所述监控步骤1)中监控模块可以利用注册的回调函数监控HID设备的插入。
所述监控步骤1)中监控模块可以通过轮循的方式监控HID设备的插入。
所述监控步骤2)中监控模块根据注册的回调函数的参数获取下层HID设备对象的名称。
所述监控步骤5)中监控模块可以利用注册的回调函数监控HID设备的拔除。
所述监控步骤5)中监控模块可以通过轮循的方式监控HID设备的拔除。
所述数据处理步骤2)中数据处理模块通过构造指令类型为IOCTL_HID_*的IRP并根据HID设备对象与下层HID设备类驱动层进行数据交互。
本发明通过构架一个虚拟读卡器驱动层,增加一个访问HID设备的通道,实现HID设备智能卡功能,从而使其使用方法更加灵活,应用领域更加广泛。


图l是本发明的驱动体系示意图。
图2是本发明一种使HID设备能提供智能卡接口的装置在进行监控HID设备插入时的操作流程图。
图3是本发明一种使HID设备能提供智能卡接口的装置在进行数据处理操作时的流程图。
具体实施例方式
下面结合附图和具体实施例对本发明进行更详细的描述。
参见图1,本发明一种使HID设备能提供智能卡接口的装置,是指在现有驱动体系中增加的一个虚拟读卡器驱动层13。增加一个虚拟读卡器驱动层13后的驱动体系包括四个基本层,即HID设备(硬件层)11、HID设备类驱动层(hidclass.sys)12、虚拟读卡器驱动层13和应用层14。
虚拟读卡器驱动层13包括监控模块131、数据处理模块132和PC/SC接口模块133;所述监控模块131用于监控HID设备11的插入和拔除,获取的HID设备11的名称;所述数据处理模块132用来接收并处理通过PC/SC接口模块133从应用层发来的IRP,根据监控模块131获取的HID设备对象11的名称向HID设备类驱动层12发送IRP(IO Request Package,I/O请求包);所述PC/SC接口模块133对应用层14提供标准符合PC/SC规范的驱动接口,接收从应用层14发来的IRP,并将该IRP传递给所述数据处理模块132。
所述数据处理模块132通过取HID设备对象的方式,连接HID设备类驱动层12。
应用程序14可以通过智能卡服务系统141对HID设备11进行访问,实现对HID设备11的监控。
虚拟读卡器驱动层13对应用层14提供的标准符合PC/SC规范的驱动接口有以下几种RDF_TRANSMITRDF_CARD_POWERRDF_SET_PROTOCOLRDF_CARD_TRACKINGRDF_CARD_EJECTRDF_READER_SWALLOWRDF_DEBUG_LEVELRDF_CARD_CONFISCATERDF_OCTL_VENDORRDF_ATR_PARSE根据实际需要处理相关的上述相应的接口,这里主要是处理RDF_TRANSMITRDF_CARD_POWERRDF_SET_PROTOCOL
用户使用DDK提供的函数Io Register Plug Play Notification在虚拟读卡器驱动层13中注册Callback Routine回调函数,虚拟读卡器驱动层13中的监控模块131通过Callback Routine回调函数监控HID设备11的插入和拔除,Io Register Plug Play Notification定义为NTSTATUSIo Register Plug Play NotificationIN IO_NOTIFICATION_EVENT_CATEGORYEvent Category,IN ULONGEvent Category Flags,IN PVOIDEvent Category DataOPTIONAL,IN PDRIVER_OBJECTDriver Object,IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINECallbackRoutine,IN PVOIDContext,OUT PVOID *Notification Entry函数中的Event Category Data参数设置为HID设备类驱动层12hidclass.sys注册的GUID,参数Callback Routine是虚拟读卡器驱动层13需要处理的回调函数。
上述装置,即虚拟读卡器驱动层13的工作方法包括监控步骤和数据处理步骤。虚拟读卡器驱动层从安装成功后开始工作,安装的过程中使用Io Register Plug Play Notification函数注册回调函数CallbackRoutine。
虚拟读卡器驱动层中的监控模块在监控HID设备插入时的步骤如图2所示。包括步骤201HID设备插入后,监控模块通过回调函数CallbackRoutine监控到HID设备的插入;监控模块也可以通过轮循的方式监控HID物理设备的插入。
步骤202监控模块获取下层HID设备对象的名称,并判断插入的HID设备是否为需处理的HID物理设备;如果是,则执行步骤203后再执行步骤204,否则直接执行步骤204。
步骤203监控模块根据名称取下层HID设备对象并保存,建立与HID设备的联系,通知智能卡服务系统智能卡已插入,并设置智能卡服务启动标志,虚拟读卡器驱动层进入等待状态;步骤204返回。
所述监控模块可以通过回调函数Callback Routine或轮循的方式监控到HID设备的拔除。当监控模块监控到HID设备的拔除时,清空HID设备插入后占用的系统资源,并通知智能卡服务系统有智能卡拔除。
虚拟读卡器驱动层中的数据处理模块在进行数据处理时的步骤如图3所示,包括步骤301数据处理模块接收到应用层发来的IRP;步骤302数据处理模块判断应用层发来的IRP是否与硬件(即HID设备)相关;
如果不相关则执行步骤303,如果相关则执行步骤304。
步骤303数据处理模块内部处理IRP,并将处理结果返回应用程序;步骤304数据处理模块根据HID数据传输协议重新组装IRP;步骤305数据处理模块将组装后的IRP发给HID设备类驱动层;步骤306数据处理模块等待HID设备类驱动层返回处理后的IRP;步骤307数据处理模块对返回的IRP进行相应处理,并将处理结果返回应用层。
权利要求
1.一种使HID设备能提供智能卡接口的装置,其特征在于所述装置为虚拟读卡器驱动层,该虚拟读卡器驱动层包括监控模块,用于监控HID设备的插入和拔除,获取HID设备对象的名称;PC/SC接口模块,对应用层提供标准符合PC/SC规范的驱动接口,接收从应用层发来的IRP,并将该IRP传递给数据处理模块;数据处理模块,用来接收并处理通过PC/SC接口模块从应用层发来的IRP,根据监控模块获取的HID设备对象的名称向HID设备类驱动层发送IRP。
2.根据权利要求1所述的使HID设备能提供智能卡接口的装置,其特征在于所述数据处理模块通过获取HID设备对象的方式,连接HID设备类驱动层。
3.一种根据权利要求1所述装置的工作方法,其特征在于,所述方法包括监控步骤1)当有HID设备插入时,监控模块监控到HID设备的插入;2)监控模块获取下层HID设备对象的名称;3)监控模块判断插入的HID设备是否为需处理的HID设备;4)监控模块初始化程序中的变量,并通知智能卡服务系统有智能卡插入;5)当拔除HID设备时,监控模块监控到HID设备的拔除,清空HID设备插入后占用的系统资源,并通知智能卡服务系统有智能卡拔除;数据处理步骤1)数据处理模块接到应用层发来的与HID设备相关的IRP,并根据HID数据传输协议重新组装IRP;2)数据处理模块将重新组装的IRP发送到下层HID设备类驱动层进行数据交互,并将交互后的结果返回应用层。
4.根据权利要求3所述的方法,其特征在于所述监控步骤1)中监控模块利用注册的回调函数监控HID设备的插入。
5.根据权利要求3所述的方法,其特征在于所述监控步骤1)中监控模块可以通过轮循的方式监控HID设备的插入。
6.根据权利要求3所述的方法,其特征在于所述监控步骤2)中监控模块根据注册的回调函数的参数获取下层HID设备对象的名称。
7.根据权利要求3所述的方法,其特征在于所述监控步骤5)中监控模块可以利用注册的回调函数监控HID设备的拔除。
8.根据权利要求3所述的方法,其特征在于所述监控步骤5)中监控模块可以通过轮循的方式监控HID设备的拔除。
9.根据权利要求3所述的方法,其特征在于所述数据处理步骤2)中数据处理模块通过构造指令类型为IOCTL_HID_*的IRP并根据HID设备对象与下层HID设备类驱动层进行数据交互。
全文摘要
为了解决HID设备不能直接应用于智能卡各个领域、实现智能卡功能的问题,本发明公开了一种使HID设备能提供智能卡接口的装置及方法。所述装置为虚拟读卡器驱动层,包括监控模块,用于监控HID设备的插入和拔除,获取的HID设备对象的名称;PC/SC接口模块,对应用层提供标准符合PC/SC规范的驱动接口,接收从应用层发来的IRP,并将该IRP传递给所述数据处理模块;数据处理模块,用来接收并处理通过PC/SC接口模块从应用层发来的IRP,根据监控模块获取的HID设备的名称向HID设备类驱动层发送IRP。所述装置的工作方法包括监控步骤和数据处理步骤。通过本发明实现了HID设备智能卡功能,而且使其使用方法更加灵活,应用领域更加广泛。
文档编号G06F13/00GK1904864SQ20061008928
公开日2007年1月31日 申请日期2006年8月15日 优先权日2006年8月15日
发明者陆舟, 于华章 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1