專利名稱:一種使海量存儲類設備能提供智能卡接口的裝置及方法
技術領域:
本發(fā)明涉及在內核驅動中監(jiān)控海量存儲類設備的裝置及方法,特別是指一種使海量存儲類設備能提供智能卡接口的裝置及方法。
背景技術:
WDM(Win32 Driver Mode,Win32驅動模型)是微軟公司為Windows的驅動程序設計的一種通用的驅動程序模型。隨著系統(tǒng)的升級,WDM已經(jīng)成為Windows系統(tǒng)驅動程序開發(fā)的主流。WDM體系結構實行分層處理,即設備驅動被分成過濾驅動程序、功能驅動程序和總線驅動程序。每層驅動程序又把I/O請求劃分成更簡單的請求,以傳給下層的驅動程序執(zhí)行??偩€驅動程序最后收到I/O請求后,通過硬件抽象層與硬件發(fā)生作用,從而完成I/O請求操作。
一般智能卡生產(chǎn)商通常除了要提供智能卡物理設備,還要提供相應的功能驅動程序,該功能驅動程序既可以作為讀卡器接口與上層應用進行數(shù)據(jù)通訊,又可以通過與下層的總線驅動進行通訊,完成與硬件之間的數(shù)據(jù)讀寫。功能驅動程序的這兩種功能即可以在一個功能驅動中實現(xiàn),也可以根據(jù)需要設計成兩個單獨的驅動,一部分完成讀卡器功能,一部分完成與硬件相關部分功能(以下統(tǒng)一稱為智能卡設備功能驅動)。數(shù)據(jù)傳輸經(jīng)過的順序是應用發(fā)送數(shù)據(jù)時,數(shù)據(jù)依次經(jīng)智能卡服務系統(tǒng)、智能卡設備功能驅動、總線驅動,到達智能卡物理設備。數(shù)據(jù)從硬件返回時,數(shù)據(jù)依次經(jīng)總線驅動、智能卡設備功能驅動、智能卡服務系統(tǒng)到達應用。
在設計智能卡設備功能驅動時,需要在驅動中提供PC/SC回調函數(shù)接口,并在設備功能驅動中指定讀卡器名稱。回調函數(shù)大多由使用者自己定義名字,函數(shù)體是系統(tǒng)定義好的,回調函數(shù)的用法為使用者定義一個函數(shù)變量類型,然后定義一個這種類型的變量,并對這個變量賦值,再把變量作為參數(shù)傳給調用者(一般為系統(tǒng)本身),調用者根據(jù)參數(shù)調用回調函數(shù)。
應用層通過使用智能卡服務的PC/SC接口,就能開始智能卡正常的通訊工作。這樣設計出來的智能卡能實現(xiàn)智能卡的全部應用。
PC/SC規(guī)范是由微軟公司與世界其它著名的智能卡廠商組成的PC/SC工作組提出的一個基于WINDOWS平臺的一個標準用戶接口(API),提供了一個從個人電腦(Personal Computer)到智能卡(SmartCard)的整合環(huán)境,應用程序通過該標準用戶接口與智能卡進行通訊。
通用串行(USB)總線接口是一種快速,靈活的接口,具有極大的易用性,如支持熱插拔、所有的配置過程都由系統(tǒng)自動完成等,適合應用于數(shù)碼相機、mp3播放器、高速數(shù)據(jù)采集等多種設備。
通常所用的U盤、移動硬盤使用USB接口,也均屬于海量存儲類設備。USB組織定義了海量存儲設備類的規(guī)范,該類規(guī)范包括四個獨立的子類規(guī)范1.USB Mass Storage Class Control/Bulk/Interrupt(CBI)Transport;2.USB Mass Storage Class Bulk-Only Trasport;
3.USB Mass Storage Class ATA Command Block;4.USB Mass Storage Class UFI Command Specification。
上述前兩個子規(guī)范定義了數(shù)據(jù)/命令/狀態(tài)在USB上的傳輸方法。Bulk-Only傳輸規(guī)范僅僅使用Bulk端點傳送數(shù)據(jù)/命令/狀態(tài),CBI傳輸規(guī)范則使用Control/Bulk/Interrupt三種類型的端點進行數(shù)據(jù)/命令/狀態(tài)傳送。
上述后兩個子規(guī)范定義了存儲介質的操作命令。ATA命令規(guī)范用于硬盤,UFI命令規(guī)范是針對USB移動存儲。
Microsoft Windows中提供對Mass Storage協(xié)議的支持,因此USB移動設備只需要遵循Mass Storage協(xié)議來組織數(shù)據(jù)和處理命令,即可實現(xiàn)與PC機交換數(shù)據(jù)。
應用程序通過系統(tǒng)自帶的驅動與海量存儲類設備進行數(shù)據(jù)交互。但是系統(tǒng)自帶的驅動不是讀卡器驅動,沒有提供PC/SC驅動接口,因此應用程序不能通過使用PC/SC API直接訪問海量存儲類設備。從而使海量存儲類設備在智能卡領域的使用受到一定的局限。
發(fā)明內容
為了解決海量存儲類設備不能直接應用于智能卡各個領域、實現(xiàn)智能卡功能的問題,本發(fā)明提供一種使海量存儲類設備能提供智能卡接口的裝置及方法。
本發(fā)明通過以下方案實現(xiàn)一種使海量存儲類設備能提供智能卡接口的裝置,為虛擬讀卡器驅動層,該虛擬讀卡器驅動層包括監(jiān)控模塊,用于監(jiān)控海量存儲類設備的插入和拔除,獲取海量存儲類設備對象的名稱;PC/SC接口模塊,對應用層提供標準符合PC/SC規(guī)范的驅動接口,接收從應用層發(fā)來的IRP,并將該IRP傳遞給數(shù)據(jù)處理模塊;數(shù)據(jù)處理模塊,用來接收并處理通過PC/SC接口模塊從應用層發(fā)來的IRP并重新組裝數(shù)據(jù)包,根據(jù)監(jiān)控模塊獲取的海量存儲類設備對象的名稱向磁盤類驅動層(disk.sys)發(fā)送數(shù)據(jù)包。
所述數(shù)據(jù)處理模塊通過獲取海量存儲類設備對象的方式,連接磁盤類驅動層。
所述裝置的工作方法,包括監(jiān)控步驟1)當有海量存儲類設備插入時,監(jiān)控模塊監(jiān)控到海量存儲類設備的插入;2)監(jiān)控模塊獲取下層海量存儲類設備對象的名稱;3)監(jiān)控模塊判斷插入的海量存儲類設備是否為需處理的海量存儲類設備;4)監(jiān)控模塊初始化程序中的變量,并通知智能卡服務系統(tǒng)有智能卡插入;5)當拔除海量存儲類設備時,監(jiān)控模塊監(jiān)控到海量存儲類設備的拔除,清空海量存儲類設備插入后占用的系統(tǒng)資源,并通知智能卡服務系統(tǒng)有智能卡拔除。
數(shù)據(jù)處理步驟1)數(shù)據(jù)處理模塊接到應用層發(fā)來的與海量存儲類設備相關的IRP,并根據(jù)海量存儲類數(shù)據(jù)傳輸協(xié)議重新組裝數(shù)據(jù)包;2)數(shù)據(jù)處理模塊將重新組裝的數(shù)據(jù)包發(fā)送到下層磁盤類驅動層進行數(shù)據(jù)交互,并將交互后的結果返回應用層。
所述監(jiān)控步驟1)中監(jiān)控模塊可以利用注冊的回調函數(shù)監(jiān)控海量存儲類設備的插入。
所述監(jiān)控步驟1)中監(jiān)控模塊可以通過輪循的方式監(jiān)控海量存儲類設備的插入。
所述監(jiān)控步驟2)中監(jiān)控模塊根據(jù)注冊的回調函數(shù)的參數(shù)獲取下層海量存儲類設備對象的名稱。
所述監(jiān)控步驟5)中監(jiān)控模塊可以利用注冊的回調函數(shù)監(jiān)控海量存儲類設備的拔除。
所述監(jiān)控步驟5)中監(jiān)控模塊可以通過輪循的方式監(jiān)控海量存儲類設備的拔除。
所述數(shù)據(jù)處理步驟2)中數(shù)據(jù)處理模塊通過文件讀寫函數(shù)并根據(jù)海量存儲類設備對象與下層磁盤類驅動層進行數(shù)據(jù)交互。
本發(fā)明通過構架一個虛擬讀卡器驅動層,增加一個訪問海量存儲類設備的通道,實現(xiàn)海量存儲類設備智能卡功能,從而使其使用方法更加靈活,應用領域更加廣泛。
圖1是本發(fā)明的驅動體系示意圖。
圖2是本發(fā)明一種使海量存儲類設備能提供智能卡接口的裝置在進行監(jiān)控海量存儲類設備插入時的操作流程圖。
圖3是本發(fā)明一種使海量存儲類設備能提供智能卡接口的裝置在進行數(shù)據(jù)處理操作時的流程圖。
具體實施例方式
下面結合附圖和具體實施例對本發(fā)明進行更詳細的描述。
參見圖1,本發(fā)明一種使海量存儲類設備能提供智能卡接口的裝置,是指在現(xiàn)有驅動體系中增加的一個虛擬讀卡器驅動層13。增加一個虛擬讀卡器驅動層13后的驅動體系包括四個基本層,即海量存儲類設備(硬件層)11、磁盤類驅動層(disk.sys)12、虛擬讀卡器驅動層13和應用層14。
虛擬讀卡器驅動層13包括監(jiān)控模塊131、數(shù)據(jù)處理模塊132和PC/SC接口模塊133;所述監(jiān)控模塊131用于監(jiān)控海量存儲類設備11的插入和拔除,獲取海量存儲類設備對象的名稱;所述數(shù)據(jù)處理模塊132用來接收并處理通過PC/SC接口模塊133從應用層發(fā)來的IRP,根據(jù)監(jiān)控模塊131獲取的海量存儲類設備對象的名稱向磁盤類驅動層12發(fā)送數(shù)據(jù);所述PC/SC接口模塊133對應用層14提供標準符合PC/SC規(guī)范的驅動接口,接收從應用層14發(fā)來的IRP,并將該IRP傳遞給所述數(shù)據(jù)處理模塊132。
所述數(shù)據(jù)處理模塊132通過取海量存儲類設備對象的方式,連接磁盤類驅動層12。
應用層14可以通過智能卡服務系統(tǒng)141對海量存儲類設備11進行訪問,實現(xiàn)對海量存儲類設備11的監(jiān)控。
虛擬讀卡器驅動層13對應用層14提供的標準符合PC/SC規(guī)范的驅動接口有以下幾種RDF_TRANSMITRDF_CARD_POWERRDF_SET_PROTOCOLRDF_CARD_TRACKINGRDF_CARD_EJECTRDF_READER_SWALLOWRDF_DEBUG_LEVELRDF_CARD_CONFISCATERDF_IOCTL_VENDORRDF_ATR_PARSE根據(jù)實際需要處理相關的上述相應的接口,這里主要是處理RDF_TRANSMITRDF_CARD_POWERRDF_SET_PROTOCOL用戶使用DDK提供的函數(shù)Io Register Plug Play Notification在虛擬讀卡器驅動層13中注冊CallbackRoutine回調函數(shù),虛擬讀卡器驅動層13中的監(jiān)控模塊131通過CallbackRoutine回調函數(shù)監(jiān)控海量存儲類設備11的插入和拔除,Io Register Plug Play Notification定義為NTSTATUSIo Register Plug Play Notification
INIO_NOTIFICATION_EVENI_CATEGORY EventCategory,IN ULONG Event Category Flags,IN PVOID Event Category Data OPTIONAL,IN PDRIVER_OBJECTDriver Object,IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINECallbackRoutine,IN PVOID Context,OUT PVOID*Notification Entry函數(shù)中的Event Category Data參數(shù)設置為磁盤類驅動層12注冊的GUID,參數(shù)CallbackRoutine是虛擬讀卡器驅動層13需要處理的回調函數(shù)。
上述裝置,即虛擬讀卡器驅動層13的工作方法包括監(jiān)控步驟和數(shù)據(jù)處理步驟。虛擬讀卡器驅動層從安裝成功后開始工作,安裝的過程中使用Io Register Plug Play Notification函數(shù)注冊回調函數(shù)CallbackRoutine。
虛擬讀卡器驅動層中的監(jiān)控模塊在監(jiān)控海量存儲類設備插入時的步驟如圖2所示。包括步驟201海量存儲類設備插入后,監(jiān)控模塊通過回調函數(shù)Callback Routine監(jiān)控到海量存儲類設備的插入;監(jiān)控模塊也可以通過輪循的方式監(jiān)控海量存儲類設備的插入。
步驟202監(jiān)控模塊獲取下層海量存儲類設備對象的名稱,并判斷插入的海量存儲類設備是否為需處理的海量存儲類設備;如果是,則執(zhí)行步驟203后再執(zhí)行步驟204,否則直接執(zhí)行步驟204。
步驟203監(jiān)控模塊根據(jù)名稱取下層海量存儲類設備對象并保存,建立與海量存儲類設備的聯(lián)系,通知智能卡服務系統(tǒng)智能卡已插入,并設置智能卡服務啟動標志,虛擬讀卡器驅動層進入等待狀態(tài);步驟204返回。
所述監(jiān)控模塊可以通過回調函數(shù)Callback Routine或輪循的方式監(jiān)控到海量存儲類設備的拔除。當監(jiān)控模塊監(jiān)控到海量存儲類設備的拔除時,清空海量存儲類設備插入后占用的系統(tǒng)資源,并通知智能卡服務系統(tǒng)有智能卡拔除。
虛擬讀卡器驅動層中的數(shù)據(jù)處理模塊在進行數(shù)據(jù)處理時的步驟如圖3所示,包括步驟301數(shù)據(jù)處理模塊接收到應用層發(fā)來的IRP;步驟302數(shù)據(jù)處理模塊判斷應用層發(fā)來的IRP是否與硬件(即海量存儲類設備)相關;如果不相關則執(zhí)行步驟303,如果相關則執(zhí)行步驟304。
步驟303數(shù)據(jù)處理模塊內部處理IRP,并將處理結果返回應用層;步驟304數(shù)據(jù)處理模塊根據(jù)海量存儲類數(shù)據(jù)傳輸協(xié)議重新組裝數(shù)據(jù)包;步驟305數(shù)據(jù)處理模塊將組裝后的數(shù)據(jù)包通過寫文件的方式發(fā)給磁盤類驅動層;步驟306數(shù)據(jù)處理模塊通過讀文件的方式從磁盤類驅動層取得數(shù)據(jù);步驟307數(shù)據(jù)處理模塊對步驟306中所述的數(shù)據(jù)進行相應處理,并將處理結果返回應用層。
權利要求
1.一種使海量存儲類設備能提供智能卡接口的裝置,其特征在于所述裝置為虛擬讀卡器驅動層,該虛擬讀卡器驅動層包括監(jiān)控模塊,用于監(jiān)控海量存儲類設備的插入和拔除,獲取海量存儲類設備對象的名稱;PC/SC接口模塊,對應用層提供標準符合PC/SC規(guī)范的驅動接口,接收從應用層發(fā)來的IRP,并將該IRP傳遞給數(shù)據(jù)處理模塊;數(shù)據(jù)處理模塊,用來接收并處理通過PC/SC接口模塊從應用層發(fā)來的IRP并重新組裝數(shù)據(jù)包,根據(jù)監(jiān)控模塊獲取的海量存儲類設備對象的名稱向磁盤類驅動層發(fā)送數(shù)據(jù)包。
2.根據(jù)權利要求1所述的使海量存儲類設備能提供智能卡接口的裝置,其特征在于所述數(shù)據(jù)處理模塊通過獲取海量存儲類設備對象的方式,連接磁盤類驅動層。
3.一種根據(jù)權利要求1所述裝置的工作方法,其特征在于,所述方法包括監(jiān)控步驟1)當有海量存儲類設備插入時,監(jiān)控模塊監(jiān)控到海量存儲類設備的插入;2)監(jiān)控模塊獲取下層海量存儲類設備對象的名稱;3)監(jiān)控模塊判斷插入的海量存儲類設備是否為需處理的海量存儲類設備;4)監(jiān)控模塊初始化程序中的變量,并通知智能卡服務系統(tǒng)有智能卡插入;5)當拔除海量存儲類設備時,監(jiān)控模塊監(jiān)控到海量存儲類設備的拔除,清空海量存儲類設備插入后占用的系統(tǒng)資源,并通知智能卡服務系統(tǒng)有智能卡拔除;數(shù)據(jù)處理步驟1)數(shù)據(jù)處理模塊接到應用層發(fā)來的與海量存儲類設備相關的IRP,并根據(jù)海量存儲類數(shù)據(jù)傳輸協(xié)議重新組裝數(shù)據(jù)包;2)數(shù)據(jù)處理模塊將重新組裝的數(shù)據(jù)包發(fā)送到下層磁盤類驅動層進行數(shù)據(jù)交互,并將交互后的結果返回應用層。
4.根據(jù)權利要求3所述的工作方法,其特征在于所述監(jiān)控步驟1)中監(jiān)控模塊利用注冊的回調函數(shù)監(jiān)控海量存儲類設備的插入。
5.根據(jù)權利要求3所述的工作方法,其特征在于所述監(jiān)控步驟1)中監(jiān)控模塊通過輪循的方式監(jiān)控海量存儲類設備的插入。
6.根據(jù)權利要求3所述的工作方法,其特征在于所述監(jiān)控步驟2)中監(jiān)控模塊根據(jù)注冊的回調函數(shù)的參數(shù)獲取下層海量存儲類設備對象的名稱。
7.根據(jù)權利要求3所述的工作方法,其特征在于所述監(jiān)控步驟5)中監(jiān)控模塊利用注冊的回調函數(shù)監(jiān)控海量存儲類設備的拔除。
8.根據(jù)權利要求3所述的工作方法,其特征在于所述監(jiān)控步驟5)中監(jiān)控模塊通過輪循的方式監(jiān)控海量存儲類設備的拔除。
9.根據(jù)權利要求3所述的工作方法,其特征在于所述數(shù)據(jù)處理步驟2)中數(shù)據(jù)處理模塊通過文件讀寫函數(shù)并根據(jù)海量存儲類設備對象與下層磁盤類驅動層進行數(shù)據(jù)交互。
全文摘要
本發(fā)明公開了一種使海量存儲類設備能提供智能卡接口的裝置及方法。所述裝置為虛擬讀卡器驅動層,包括監(jiān)控模塊,用于監(jiān)控海量存儲類設備的插入和拔除,獲取海量存儲類設備對象的名稱;PC/SC接口模塊,對應用層提供標準符合PC/SC規(guī)范的驅動接口,接收從應用層發(fā)來的IRP,并將該IRP傳遞給數(shù)據(jù)處理模塊;數(shù)據(jù)處理模塊,用來接收并處理通過PC/SC接口模塊從應用層發(fā)來的IRP并重新組裝數(shù)據(jù)包,根據(jù)監(jiān)控模塊獲取的海量存儲類設備對象的名稱向磁盤類驅動層發(fā)送數(shù)據(jù)包。所述裝置的工作方法包括監(jiān)控步驟和數(shù)據(jù)處理步驟。通過本發(fā)明實現(xiàn)了海量存儲類設備智能卡功能,使其使用方法更加靈活,應用領域更加廣泛。
文檔編號G06F3/06GK1912822SQ200610112608
公開日2007年2月14日 申請日期2006年8月25日 優(yōu)先權日2006年8月25日
發(fā)明者陸舟, 于華章 申請人:北京飛天誠信科技有限公司