亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種實現(xiàn)hid/scsi設(shè)備pc/sc接口的系統(tǒng)和方法

文檔序號:6464636閱讀:373來源:國知局
專利名稱:一種實現(xiàn)hid/scsi設(shè)備pc/sc接口的系統(tǒng)和方法
技術(shù)領(lǐng)域
本發(fā)明涉及通信安全領(lǐng)域,特別涉及一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng)和方法。
技術(shù)背景HID (Human Interface Device,人機接口設(shè)備)設(shè)備是一種不需要用戶再開發(fā)任何驅(qū)動, 插入支持windows等操作系統(tǒng)的計算機就能使用的設(shè)備,所有的HID設(shè)備都是通過操作系統(tǒng) 自帶的HID設(shè)備類驅(qū)動(如,windows下的hidclass.sys)與各種應(yīng)用建立聯(lián)系,應(yīng)用層程 序只需要調(diào)用現(xiàn)有的應(yīng)用層接口 HID API (Application Programming Interface,應(yīng)用程序 編程接口)就能訪問HID設(shè)備,正是針對這一特性,HID設(shè)備提供商只需要給用戶提供物理 設(shè)備就能滿足一般的應(yīng)用。但是,隨著技術(shù)的發(fā)展,HID設(shè)備的種類也越來越多,例如針對 應(yīng)用于智能卡領(lǐng)域的HID設(shè)備,由于各類操作系統(tǒng)自帶的HID設(shè)備類驅(qū)動(hidclass.sys) 并沒有提供協(xié)議處理器部分的功能,不能直接通過智能卡服務(wù)系統(tǒng)傳輸數(shù)據(jù),應(yīng)用訪問HID 物理設(shè)備時,只能調(diào)用HID API訪問HID設(shè)備,因此,僅僅提供HID物理設(shè)備不能使之完成 智能卡的功能。另外,SCSI (Small Computer System Interface,小型主機系統(tǒng)接口)是主機連接外設(shè) 備的一種接口標準,能夠提供更高的數(shù)據(jù)傳輸率。SCSI為方便開發(fā)者使用預(yù)留了接口指令, 為完成接外設(shè)備的SCSI通訊,開發(fā)者將SCSI接口指令設(shè)計成接外設(shè)備的命令,以完成接外 設(shè)備的功能,但是在Windows 2000及以上操作系統(tǒng)下,普通用戶沒有權(quán)限使用SCSI接口指 令,這就給SCSI設(shè)備的使用帶來了很多的不便。PC/SC (Personal Computer/ SmartCard,個人電腦/智能卡)規(guī)范是由微軟公司與世界 其它著名的智能卡廠商組成的PC/SC工作組提出的一個基于windows平臺的一個標準用戶接 口 (API),提供了一個從個人電腦PC到智能卡SC的整合環(huán)境,應(yīng)用程序通過該標準用戶接 口與智能卡進行通訊。由于Windows操作系統(tǒng)內(nèi)置了 PC/SC驅(qū)動程序,主機程序無需任何修 改就可以直接使用符合PC/SC規(guī)范的硬件設(shè)備。但是這種方式只限于符合PC/SC規(guī)范的硬件 設(shè)備?,F(xiàn)在的硬件設(shè)備能夠?qū)崿F(xiàn)的功能多樣而獨特,越來越多的軟/硬件開發(fā)人員使用自行開 發(fā)的驅(qū)動程序來操作硬件,以使該硬件設(shè)備具有特別功能,或者將硬件設(shè)備設(shè)計為非PC/SC規(guī)范的,利用系統(tǒng)集成的對應(yīng)的驅(qū)動程序來操作硬件設(shè)備,來避免在操作系統(tǒng)中安裝驅(qū)動程 序,方便部署。通常,無驅(qū)產(chǎn)品中的HID/SCSI類設(shè)備都是使用的計算機操作系統(tǒng)自帶的驅(qū)動 進行訪問,雖然這種方式的便利是不再隨硬件設(shè)備派發(fā)驅(qū)動程序,可是,在某些場合下,我 們需要PC/SC接口方式使用該HID/SCSI類的硬件設(shè)備(比如,利用該HID/SCSI類的硬件設(shè) 備實現(xiàn)遠程服務(wù)器的域登陸功能等)。面對這種需求,通常會采用構(gòu)造一個PC/SC驅(qū)動利用操 作系統(tǒng)HID/SCSI接口協(xié)議實現(xiàn)訪問HID/SCSI設(shè)備?,F(xiàn)有技術(shù)中,通過HID協(xié)議處理單元和 SCSI協(xié)議處理單元,將HID/SCSI接口指令放在操作系統(tǒng)的內(nèi)核級的PC/SC驅(qū)動程序中,該 PC/SC驅(qū)動程序又置于計算機內(nèi)核程序中,因此在PC/SC驅(qū)動程序運行時, 一旦出錯,很容 易導(dǎo)致整個操作系統(tǒng)的崩潰,當出現(xiàn)新的HID/SCSI設(shè)備時,只有修改PC/SC驅(qū)動程序才能得 到計算機程序的支持,修改調(diào)試PC/SC驅(qū)動程序的過程煩瑣,且不易維護,修改PC/SC驅(qū)動 程序需要花費大量的時間和精力,且容易造成一旦修改不善,將導(dǎo)致整個操作系統(tǒng)崩潰。發(fā)明內(nèi)容鑒于現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng)和方法, 在本發(fā)明中,通過位于應(yīng)用層的伺服模塊實現(xiàn)對HID/SCSI設(shè)備的靈活支持,從而滿足實現(xiàn) 應(yīng)用程序與HID/SCSI設(shè)備的數(shù)據(jù)通信,具體實現(xiàn)技術(shù)方案,如下。一方面,提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng),該系統(tǒng)包括伺服模塊、PC/SC 驅(qū)動模塊、設(shè)備管理模塊和應(yīng)用程序模塊;所述伺服模塊,用于將計算機獲取的所述HID/SCSI設(shè)備的信息上報給所述PC/SC驅(qū)動模 塊,并提供所述HID/SCSI設(shè)備和所述PC/SC驅(qū)動模塊之間的數(shù)據(jù)交互通道;所述PC/SC驅(qū)動模塊,用于將所述伺服模塊報告的所述HID/SCSI設(shè)備的信息,上報給所 述設(shè)備管理模塊,并提供所述伺服模塊和所述設(shè)備管理模塊之間的數(shù)據(jù)交互通道;所述設(shè)備管理模塊,用于將所述PC/SC驅(qū)動模塊報告的所述HID/SCSI設(shè)備的信息,上報 給所述應(yīng)用程序模塊;并向所述應(yīng)用程序模塊提供訪問所述HID/SCSI設(shè)備的接口信息;所述應(yīng)用程序模塊,用于根據(jù)所述設(shè)備管理模塊報告的所述HID/SCSI設(shè)備的信息和提供 的訪問所述HID/SCSI設(shè)備的接口信息,訪問所述HID/SCSI設(shè)備。其中,所述伺服模塊位于所述系統(tǒng)的應(yīng)用層,所述伺服模塊包括伺服函數(shù)庫單元和監(jiān) 控單元;伺服函數(shù)庫單元,用于通過提供HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行 HID/SCSI協(xié)議處理,獲取所述HID/SCSI設(shè)備的信息及實現(xiàn)數(shù)據(jù)交互;其中,所述HID接口設(shè)備描述符,用于向所述計算機聲明設(shè)備類型具體為HID設(shè)備類型,并解析處理HID命令, 所述SCSI接口設(shè)備描述符,用于向所述計算機聲明設(shè)備類型具體為SCSI設(shè)備類型,并解析 處理SCSI命令;監(jiān)控單元,用于監(jiān)控所述HID/SCSI設(shè)備和所述計算機的連接狀態(tài)。其中,在獲取所述HID/SCSI設(shè)備和所述計算機的連接狀態(tài)實現(xiàn)時,可以采用回調(diào)函數(shù)的 方式和注冊表監(jiān)控方式,相應(yīng)地,所述監(jiān)控單元具體為第一監(jiān)控子單元,用于實現(xiàn)所述伺服模塊所提供的伺服程序通過所述回調(diào)函數(shù)獲取所述 HID/SCSI設(shè)備與所述計算機的連接狀態(tài);或,第二監(jiān)控子單元,用于監(jiān)控注冊表,實現(xiàn)所述伺服模塊所提供的伺服程序通過對所述注 冊表指定位置的監(jiān)控獲取所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài)。其中,所述伺服函數(shù)庫單元至少為一個,當所述伺服函數(shù)庫單元為多個時,每個伺服函 數(shù)庫單元用于通過各自提供的HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行HID/SCSI協(xié) 議處理,獲取各自對應(yīng)的HID/SCSI設(shè)備的信息及實現(xiàn)數(shù)據(jù)交互。進一步地,所述設(shè)備管理模塊還包括緩沖存儲單元,所述緩沖存儲單元用于緩存系統(tǒng) 當前可用的智能卡SC協(xié)議處理器的標識。另一方面,提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法,該方法包括位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫,所述伺服函數(shù)庫將創(chuàng)建 的內(nèi)核對象發(fā)送給PC八SC驅(qū)動程序;當所述伺服程序獲知HID/SCSI設(shè)備與所述計算機建立連接后,通過所述PC/SC驅(qū)動程序 向計算機設(shè)備管理程序上報所述HID/SCSI設(shè)備的信息;所述計算機設(shè)備管理程序根據(jù)所述HID/SCSI設(shè)備的信息,判斷所述HID/SCSI設(shè)備符合 訪問要求后,所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備 的指令,通過所述內(nèi)核對象發(fā)送給所述伺服程序;所述伺服程序接收所述訪問指令,調(diào)用伺服函數(shù)庫,獲取所述伺服函數(shù)庫中調(diào)用HID/SCSI 接口指令的代碼信息;所述應(yīng)用程序通過所述PC/SC驅(qū)動程序和伺服程序,經(jīng)PC/SC接口對所述HID/SCSI設(shè) 備進行訪問。其中,該方法中位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫之前,還 包括計算機啟動,加載PC/SC驅(qū)動程序信息至計算機內(nèi)存;計算機設(shè)備管理程序從所述計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息; 所述PC/SC驅(qū)動程序向所述設(shè)備管理程序注冊協(xié)議處理器的標識; 相應(yīng)地,所述判斷所述HID/SCSI設(shè)備符合訪問要求,具體為根據(jù)所述HID/SCSI設(shè)備的信息中攜帶的HID/SCSI設(shè)備的協(xié)議處理模塊的標識,判斷所 述標識是否和注冊的標識匹配,如果是,則所述HID/SCSI設(shè)備符合訪問要求;否則,所述 HID八SCSI設(shè)備不符合訪問要求。其中,經(jīng)PC/SC接口對所述HID/SCSI設(shè)備進行訪問的步驟之后,所述方法還包括所述計算機中的應(yīng)用層的伺服程序獲取HID/SCSI設(shè)備中的數(shù)據(jù),通過內(nèi)核對象將所述數(shù) 據(jù)發(fā)送給所述PC/SC驅(qū)動程序;所述PC/SC驅(qū)動程序通過所述設(shè)備管理程序?qū)⑺鯤ID/SCSI設(shè)備中的數(shù)據(jù)發(fā)送給所述 應(yīng)用程序。其中,上述經(jīng)PC/SC接口對所述HID/SCSI設(shè)備進行訪問具體為 打開與所述HID/SCSI設(shè)備的連接;或, 關(guān)閉與所述HID/SCSI設(shè)備的連接;或, 獲取所述HID/SCSI設(shè)備的復(fù)位應(yīng)答(即ATR);或, 與所述HID/SCSI設(shè)備進行APDU交互。上述本發(fā)明實施例提供的方法中,所述伺服函數(shù)庫為多個時,每個伺服函數(shù)庫用于通過 各自提供的HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行HID/SCSI協(xié)議處理,獲取各自 對應(yīng)的HID/SCSI設(shè)備的信息,實現(xiàn)數(shù)據(jù)交互。進一步地,所述伺服程序加載所述伺服函數(shù)庫的方法還可以為創(chuàng)建文件對象方式; 相應(yīng)地,所述位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫,所述伺服 函數(shù)庫將創(chuàng)建的內(nèi)核象發(fā)送給PC/SC驅(qū)動程序的步驟,具體為位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫,所述伺服函數(shù)庫將創(chuàng)建的文件對象發(fā)送給PC/SC驅(qū)動程序;相應(yīng)地,所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備的指令,通過所述內(nèi)核對象發(fā)送給伺服程序的步驟,具體為所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備的指令, 通過所述文件對象發(fā)送給伺服程序;相應(yīng)地,所述位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫之前,還包括計算機啟動加載PC/SC驅(qū)動程序信息至計算機內(nèi)存;計算機設(shè)備管理程序從計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息; 所述PC/SC驅(qū)動程序向所述設(shè)備管理程序注冊協(xié)議處理器的標識。當采用創(chuàng)建文件對象方式,實現(xiàn)伺服程序加載所述伺服函數(shù)庫時,相應(yīng)地,方法還包括: 計算機中的應(yīng)用層的伺服程序獲取HID/SCSI設(shè)備中的數(shù)據(jù),通過文件對象將所述數(shù)據(jù)發(fā) 送給所述PC/SC驅(qū)動程序;所述PC/SC驅(qū)動程序通過所述設(shè)備管理程序?qū)⑺鯤ID/SCSI設(shè)備中的數(shù)據(jù)發(fā)送給所述 應(yīng)用程序。所述伺服程序向計算機設(shè)備管理程序上報所述HID/SCSI設(shè)備的信息之前,還包括所述 伺服程序監(jiān)控所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài),具體方法為 通過回調(diào)函數(shù)的方式;或, 通過注冊表監(jiān)控的方式。相應(yīng)地,當采用回調(diào)函數(shù)的方式時,所述伺服程序通過所述回調(diào)函數(shù)獲取所述HID/SCSI 設(shè)備與所述計算機的連接狀態(tài);或;當采用通過注冊表監(jiān)控的方式時,所述伺服程序通過對所述注冊表指定位置的監(jiān)控獲取 所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài)。本發(fā)明實施例提供的技術(shù)方案的有益效果是通過將HID/SCSI接口指令從PC/SC驅(qū)動程序中分離出來,利用伺服模塊來調(diào)用HID/SCSI 接口指令,為計算機提供了一條訪問HID/SCSI設(shè)備的通道,進而實現(xiàn)HID/SCSI設(shè)備通過PC/SC 接口與計算機進行通信的過程,由于伺服模塊中的伺服程序運行在系統(tǒng)應(yīng)用層,因此伺服程 序的編寫、修改以及維護都較為簡單,伺服程序的運行過程中發(fā)生錯誤,不會導(dǎo)致整個系統(tǒng) 的崩潰;當需要支持新的HID/SCSI設(shè)備時,只需通過更換伺服程序就可以實現(xiàn)計算機系統(tǒng)對 新設(shè)備的兼容,大大增強了系統(tǒng)的柔韌性和擴展性。另外,設(shè)計人員可以利用伺服函數(shù)庫的 功能使程序不至于太過巨大,比如,多個應(yīng)用程序可以共享伺服函數(shù)庫中的函數(shù),其中,伺 服函數(shù)庫以一種自然的方式將一個大的應(yīng)用程序劃分為幾個小的部分,有利于內(nèi)部的分工與 合作,各個部分可以獨立升級等等。


圖l是本發(fā)明實施例1提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng)的工作結(jié)構(gòu)圖; 圖2是本發(fā)明實施例2提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng)的工作結(jié)構(gòu)圖;圖3是本發(fā)明實施例3提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的設(shè)備的結(jié)構(gòu)圖; 圖4是本發(fā)明實施例4提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法流程示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進 一歩地詳細描述,但不作為對本發(fā)明的限定。實施例1本發(fā)明實施例提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng),本實施例中,該系統(tǒng)具 體為計算機l,其中,HID/SCSI設(shè)備具體以USB Token為例進行說明,其中,該USB Token 為一種USB (Universal Serial BUS,通用串行總線)接口的硬件設(shè)備,通過USB口實現(xiàn)與 電腦相連接,該USB Token內(nèi)嵌芯片,可將信息安全地儲存在該內(nèi)嵌芯片中,且該USB Token 內(nèi)置協(xié)議處理器,無需單獨的讀卡器,只要插入到計算機、鍵盤及顯示器的USB接口上,即 可實現(xiàn)該USB Token的使用。參見圖1,其中,計算機1包括伺服模塊11、 PC/SC驅(qū)動模塊12、設(shè)備管理模塊13、應(yīng)用程序模塊14;USB Token 2包括USB接口模塊21、協(xié)議處理模塊22、智能卡芯片模塊23。如前文所 述,該USB Token 2為HID/SCSI接口的設(shè)備;下面將詳細針對上述各功能模塊的作用進行說明針對USB Token 2而言,其中,USB接口模塊21用于實現(xiàn)USB Token 2和計算機1的連接,在本實施例中,USB接口模 塊21實現(xiàn)時,可以采用USB接口芯片;協(xié)議處理模塊22用于與智能卡芯片模塊23中運行的卡操作系統(tǒng)進行數(shù)據(jù)交互,獲取智 能卡芯片模塊23中的數(shù)據(jù)信息;智能卡芯片模塊23用于存儲用戶的密鑰、數(shù)字證書及密文信息等數(shù)據(jù),利用智能卡芯片 模塊23內(nèi)置的密碼學算法能夠?qū)崿F(xiàn)對用戶身份的認證;其中,該智能卡芯片模塊23具體設(shè) 計實現(xiàn)時,可以為基于安全設(shè)計的智能卡芯片。針對計算機l而言,其中,伺服模塊ll,用于將USB Token 2的信息報告給PC/SC驅(qū)動模塊,并為上下兩層模塊間 的數(shù)據(jù)交互提供通道,該伺服模塊位于計算機的應(yīng)用層;其中,該伺服模塊11具體可以包括伺服函數(shù)庫單元111和監(jiān)控單元112:該伺服模塊11通過調(diào)用伺服函數(shù)庫單元111來獲取HID/SCSI設(shè)備的信息(本實施例具 體為USB Token 2的信息)及實現(xiàn)數(shù)據(jù)交互;監(jiān)控單元112,用于監(jiān)控USB Token 2與計算機模塊的連接狀態(tài);可以通過該監(jiān)控單元 112獲知,該USB Token 2是否與計算機模塊建立了連接。如圖1所示,其中,伺服函數(shù)庫單元111包含HID協(xié)議處理區(qū)和SCSI協(xié)議處理區(qū),HID 協(xié)議處理區(qū)用于進行HID協(xié)議處理,獲取HID設(shè)備的信息和實現(xiàn)數(shù)據(jù)交互,HID協(xié)議處理區(qū) 內(nèi)置有HID接口設(shè)備描述符,用于向計算機1聲明其自身為HID設(shè)備類型,并解析處理HID 命令;SCSI協(xié)議處理區(qū)用于進行SCSI協(xié)議處理,獲取SCSI設(shè)備的信息及實現(xiàn)數(shù)據(jù)交互;SCSI 協(xié)議處理區(qū)內(nèi)置有SCSI接口設(shè)備描述符,用于向計算機1聲明其自身為SCSI設(shè)備類型,并 解析處理SCSI命令。上述,描述符是數(shù)據(jù)結(jié)果或信息的格式化塊,用于使計算機1獲知USB Token 2的具體 設(shè)備類型(如,HID設(shè)備類型或SCSI設(shè)備類型),其中,每個描述符包含了關(guān)于USBToken 2 的整體信息或者一個元素的信息,具體如下-按照HID協(xié)議標準,符合HID接口標準的設(shè)備其描述符的特征是在接口描述符中,字 節(jié)0是描述符的字節(jié)長度,值為09h;字節(jié)l是描述符類型,值為04h;字節(jié)4是支持的終端號,值為01h;字節(jié)5是類代碼,值為03h;字節(jié)6是子類代碼,值為00h;字節(jié)7是協(xié)議代 碼,值為00h。在類型描述符中,字節(jié)O是描述符的字節(jié)長度;字節(jié)1為HID類,值為21h;字節(jié)2是HID規(guī)范發(fā)布號,它采用二進制編碼的十進制格式,比如1.0版本是0100h, l.l版 本是0110h。符合HID接口標準的設(shè)備的其它描述符中的字節(jié),如設(shè)備描述符、配置描述符 中的字節(jié)以及上述接口描述符和類型描述符中的其它字節(jié)仍按照USB協(xié)議中的規(guī)定設(shè)備。按照SCSI協(xié)議標準,符合USB-SCSI接口標準的設(shè)備其描述符的特征是在接口描述符 中,字節(jié)O是描述符的字節(jié)長度,值為09h;字節(jié)l是描述符類型,值為04h;字節(jié)4是支持 的終端號;字節(jié)5是類代碼,值為08h;字節(jié)6為子類代碼,值為00h;字節(jié)7是協(xié)議代碼, 值為50h。在類型描述符中,字節(jié)O是描述符的字節(jié)長度,字節(jié)2是SCSI規(guī)范的版本號。符 合SCSI接口標準的設(shè)備的其它描述符中的字節(jié),如設(shè)備描述符、配置描述符中的字節(jié)以及上 述接口描述符和類型描述符中的其它字節(jié)仍按照USB協(xié)議中的規(guī)定設(shè)置。PC/SC驅(qū)動模塊12,用于將通過伺服模塊11獲取的USB Token 2的信息報告給設(shè)備管理 模塊13,并為上下兩層模塊的數(shù)據(jù)交互提供通道。設(shè)備管理模塊13,用于將通過PC/SC驅(qū)動模塊12獲取的USB Token 2的信息報告給應(yīng) 用程序模塊14,并向應(yīng)用程序模塊14提供訪問USB Token2的接口。其中,該設(shè)備管理模塊是計算機1的系統(tǒng)組件,該設(shè)備管理模塊13還包括緩沖存儲單元131,該緩沖存儲單元131 用于存儲系統(tǒng)當前可用的PC/SC協(xié)議處理器的名稱,即向系統(tǒng)注冊的PC/SC協(xié)議處理器的名稱。應(yīng)用程序模塊14,用于獲取到通過設(shè)備管理模塊13獲取的USB Token2的信息后,訪 問USB Token 2,與USB Token 2進行數(shù)據(jù)交互。其中,在獲取HID/SCSI設(shè)備和計算機的連接狀態(tài)實現(xiàn)時,可以采用回調(diào)函數(shù)的方式和注 冊表監(jiān)控方式,相應(yīng)地,監(jiān)控單元具體為第一監(jiān)控子單元,用于實現(xiàn)伺服程序通過回調(diào)函數(shù)獲取HID/SCSI設(shè)備與計算機的連接狀 態(tài);或,第二監(jiān)控子單元,用于監(jiān)控注冊表,實現(xiàn)伺服程序通過對注冊表指定位置的監(jiān)控獲取 HID/SCSI設(shè)備與計算機的連接狀態(tài)。綜上所述,本發(fā)明實施例提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng),將HID/SCSI接 口指令從PC/SC驅(qū)動程序中分離出來,通過伺服模塊來調(diào)用HID/SCSI接口指令,為計算機提 供了一條訪問HID/SCSI設(shè)備的通道,進而實現(xiàn)HID/SCSI設(shè)備通過PC/SC接口與計算機進行 通信的過程,由于伺服模塊中的伺服程序運行在系統(tǒng)應(yīng)用層,因此伺服程序的編寫、修改以 及維護都較為簡單,伺服程序的運行過程中發(fā)生錯誤,不會導(dǎo)致整個系統(tǒng)的崩潰;當需要支 持新的HID/SCSI設(shè)備時,只需通過更換伺服程序就可以實現(xiàn)計算機系統(tǒng)對新設(shè)備的兼容,大 大增強了系統(tǒng)的柔韌性和擴展性。另外,設(shè)計人員可以利用伺服函數(shù)庫的功能使程序不至于 太過巨大,比如,多個應(yīng)用程序可以共享伺服函數(shù)庫中的函數(shù),其中,伺服函數(shù)庫以一種自 然的方式將一個大的應(yīng)用程序劃分為幾個小的部分,有利于內(nèi)部的分工與合作,各個部分可 以獨立升級等等。實施例2如圖2所示,本發(fā)明實施例提供了一種通過使用不同的伺服模塊實現(xiàn)對多個USB Token 進行訪問的系統(tǒng),與實施例l的區(qū)別在于,在本實施例中,伺服模塊ll包括多個伺服函數(shù)庫單元。計算機1通過調(diào)用不同的伺服函數(shù)庫單元來實現(xiàn)與多個USB Token的數(shù)據(jù)通信,每個伺 服函數(shù)庫單元中都包括各自獨立的HID協(xié)議處理區(qū)和SCSI協(xié)議處理區(qū)。如圖2所示,在本實施例中,第一伺服函數(shù)庫單元關(guān)聯(lián)USB Tokenl、第二伺服函數(shù)庫 單元關(guān)聯(lián)USB Token2、第三伺服函數(shù)庫單元關(guān)聯(lián)USB Token3,伺服模塊伺服函數(shù)庫單元分別與不同的USB Token進行數(shù)據(jù)通信。相應(yīng)地,監(jiān)控單元的作用是監(jiān)控各USB Token和計算機的連接狀態(tài)。綜上所述,本發(fā)明實施例提供的系統(tǒng),進一步地實現(xiàn)了系統(tǒng)對多個USB Token進行訪問的功能,提高了系統(tǒng)的訪問性能,方便了用戶的操作使用。實施例3參見圖3,本發(fā)明實施例提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的設(shè)備,與本發(fā)明實 施例l提供的系統(tǒng)相應(yīng),該設(shè)備包括伺服模塊ll、 PC/SC驅(qū)動模塊12、設(shè)備管理模塊13、 應(yīng)用程序模塊14;下面將詳細針對上述各功能模塊的作用進行說明伺服模塊ll,用于將USB Token 2的信息報告給PC/SC驅(qū)動模塊,并為上下兩層模塊間 的數(shù)據(jù)交互提供通道,該伺服模塊位于該設(shè)備的應(yīng)用層。其中,該伺服模塊11具體可以包括:伺服函數(shù)庫單元111和監(jiān)控單元112:該伺服模塊11通過調(diào)用伺服函數(shù)庫單元111來獲取HID/SCSI設(shè)備的信息(本實施例具 體為USB Token 2的信息)及實現(xiàn)數(shù)據(jù)交互;監(jiān)控單元112,用于監(jiān)控USB Token 2與該設(shè)備的連接狀態(tài);可以通過該監(jiān)控單元112 獲知,該USB Token 2是否與該設(shè)備建立了連接。如圖1所示,其中,伺服函數(shù)庫單元111包含HID協(xié)議處理區(qū)和SCSI協(xié)議處理區(qū),HID 協(xié)議處理區(qū)用于進行HID協(xié)議處理,獲取HID設(shè)備的信息和實現(xiàn)數(shù)據(jù)交互,HID協(xié)議處理區(qū) 內(nèi)置有HID接口設(shè)備描述符,用于向該設(shè)備1聲明其自身為HID設(shè)備類型,并解析處理HID 命令;SCSI協(xié)議處理區(qū)用于進行SCSI協(xié)議處理,獲取SCSI設(shè)備的信息及實現(xiàn)數(shù)據(jù)交互;SCSI 協(xié)議處理區(qū)內(nèi)置有SCSI接口設(shè)備描述符,用于向該設(shè)備1聲明其自身為SCSI設(shè)備類型,并 解析處理SCSI命令。上述,描述符是數(shù)據(jù)結(jié)果或信息的格式化塊,用于使該設(shè)備l或獲知USB Token 2的設(shè) 備類型(如,HID設(shè)備類型或SCSI設(shè)備類型),其中,每個描述符包含了關(guān)于USB Token 2 的整體信息或者一個元素的信息,具體如下按照HID協(xié)議標準,符合HID接口標準的設(shè)備其描述符的特征是在接口描述符中,字 節(jié)0是描述符的字節(jié)長度,值為09h;字節(jié)1是描述符類型,值為04h;字節(jié)4是支持的終端號,值為01h;字節(jié)5是類代碼,值為03h;字節(jié)6是子類代碼,值為00h;字節(jié)7是協(xié)議代碼,值為00h。在類型描述符中,字節(jié)0是描述符的字節(jié)長度;字節(jié)1為HID類,值為21h; 字節(jié)2是HID規(guī)范發(fā)布號,它采用二進制編碼的十進制格式,比如1.0版本是0100h, 1. l版本是0110h。符合HID接口標準的設(shè)備的其它描述符中的字節(jié),如設(shè)備描述符、配置描述符 中的字節(jié)以及上述接口描述符和類型描述符中的其它字節(jié)仍按照USB協(xié)議中的規(guī)定設(shè)備。按照SCSI協(xié)議標準,符合USB-SCSI接口標準的設(shè)備其描述符的特征是在接口描述符 中,字節(jié)O是描述符的字節(jié)長度,值為09h;字節(jié)l是描述符類型,值為04h;字節(jié)4是支持 的終端號;字節(jié)5是類代碼,值為08h;字節(jié)6為子類代碼,值為00h;字節(jié)7是協(xié)議代碼, 值為50h。在類型描述符中,字節(jié)O是描述符的字節(jié)長度,字節(jié)2是SCSI規(guī)范的版本號。符 合SCSI接口標準的設(shè)備的其它描述符中的字節(jié),如設(shè)備描述符、配置描述符中的字節(jié)以及上 述接口描述符和類型描述符中的其它字節(jié)仍按照USB協(xié)議中的規(guī)定設(shè)置。其中,在獲取HID/SCSI設(shè)備和計算機的連接狀態(tài)實現(xiàn)時,可以采用回調(diào)函數(shù)的方式和注 冊表監(jiān)控方式,相應(yīng)地,監(jiān)控單元具體為第一監(jiān)控子單元,用于實現(xiàn)伺服程序通過回調(diào)函數(shù)獲取HID/SCSI設(shè)備與計算機的連接狀 態(tài);或,第二監(jiān)控子單元,用于監(jiān)控注冊表,實現(xiàn)伺服程序通過對注冊表指定位置的監(jiān)控獲取 HID/SCSI設(shè)備與計算機的連接狀態(tài)。PC/SC驅(qū)動模塊12,用于將通過伺服模塊11獲取的USB Token 2的信息報告給設(shè)備管理 模塊13,并為上下兩層模塊的數(shù)據(jù)交互提供通道。設(shè)備管理模塊13,用于將通過PC/SC驅(qū)動模塊12獲取的USB Token 2的信息報告給應(yīng) 用程序模塊14,并向應(yīng)用程序模塊14提供訪問USB Token 2的接口。其中,該設(shè)備管理模 塊是該設(shè)備1的系統(tǒng)組件,該設(shè)備管理模塊13還包括緩沖存儲單元131,該緩沖存儲單元131 用于存儲系統(tǒng)當前可用的PC/SC協(xié)議處理器的名稱,即向系統(tǒng)注冊的PC/SC協(xié)議處理器的名 稱。應(yīng)用程序模塊14,用于獲取到通過設(shè)備管理模塊13獲取的USB Token2的信息后,訪 問USB Token 2,與USB Token 2進行數(shù)據(jù)交互。進一步地,本發(fā)明實施例提供的設(shè)備的伺服模塊ll包括多個伺服函數(shù)庫單元。通過調(diào)用 不同的伺服函數(shù)庫單元來實現(xiàn)與多個USB Token的數(shù)據(jù)通信,每個伺服函數(shù)庫單元中都包括 各自獨立的HID協(xié)議處理區(qū)和SCSI協(xié)議處理區(qū),監(jiān)控單元的作用相應(yīng)地,便是監(jiān)控各USB Token和計算機的連接狀態(tài)。從而,進一步地實現(xiàn)了設(shè)備對多個USB Token進行訪問的功能, 提高了設(shè)備的訪問性能,方便了用戶的操作使用。綜上所述,本發(fā)明實施例提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的設(shè)備,將HID/SCSI接 口指令從PC/SC驅(qū)動程序中分離出來,通過伺服模塊來調(diào)用HID/SCSI接口指令,為該設(shè)備提供了一條訪問HID/SCSI設(shè)備的通道,進而實現(xiàn)HID/SCSI設(shè)備通過PC/SC接口與該設(shè)備進行 通信的過程,由于伺服模塊中的伺服程序運行在系統(tǒng)應(yīng)用層,因此伺服程序的編寫、修改以 及維護都較為簡單,伺服程序的運行過程中發(fā)生錯誤,不會導(dǎo)致整個系統(tǒng)的崩潰;當需要支 持新的HID/SCSI設(shè)備時,只需通過更換伺服程序就可以實現(xiàn)該設(shè)備系統(tǒng)對新設(shè)備的兼容,大 大增強了系統(tǒng)的柔韌性和擴展性。另外,設(shè)計人員可以利用伺服函數(shù)庫的功能使程序不至于 太過巨大,比如,多個應(yīng)用程序可以共享伺服函數(shù)庫中的函數(shù),其中,伺服函數(shù)庫以一種自 然的方式將一個大的應(yīng)用程序劃分為幾個小的部分,有利于內(nèi)部的分工與合作,各個部分可 以獨立升級等等。實施例4參見圖4,本發(fā)明實施例提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法,與本發(fā)明實 施例l提供的系統(tǒng)相應(yīng),本實施例中,HID/SCSI設(shè)備仍以USB Token為例進行說明,其中, 該USB Token為一種USB (Universal Serial BUS,通用串行總線)接口的硬件設(shè)備,通過 USB 口為其與電腦相連接,該USB Token內(nèi)嵌芯片,可將信息安全地儲存在該內(nèi)嵌芯片中, 且該USB Token內(nèi)置協(xié)議處理器無需單獨的讀卡器,只要插入到計算機、鍵盤及顯示器的USB 接口上,即可實現(xiàn)該USB Token的使用。該方法內(nèi)容如下步驟401:計算機啟動,加載PC/SC驅(qū)動程序信息至計算機內(nèi)存;其中,該步驟中,本領(lǐng)域技術(shù)人員可以獲知,在計算機啟動的時候,會加載操作系統(tǒng)運 行的相關(guān)程序,由于PC/SC驅(qū)動程序位于操作系統(tǒng)的內(nèi)核程序中,所以同樣會實現(xiàn)該PC/SC 驅(qū)動程序的加載,于是,在計算機啟動時實現(xiàn)加載PC/SC驅(qū)動程序至計算機內(nèi)存。 步驟40'2:設(shè)備管理程序從計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息; 其中,由于在步驟401中計算機內(nèi)存中己經(jīng)保存了加載成功的PC/SC驅(qū)動程序信息,即 該加載成功的PC/SC驅(qū)動程序信息具體為在操作系統(tǒng)中進行注冊的PC/SC驅(qū)動程序信息,該 歩驟402在具體實現(xiàn)時,可以通過設(shè)備管理程序采用枚舉計算機內(nèi)存中的駐留的各程序的形 式,獲取到所需要的該PC/SC驅(qū)動程序信息。步驟403: PC/SC驅(qū)動程序向設(shè)備管理器中的設(shè)備管理程序注冊協(xié)議處理器的名稱; 其中,該步驟是為了確保后續(xù)只有匹配了在該設(shè)備管理程序中注冊的協(xié)議處理器的USB Token,才能實現(xiàn)數(shù)據(jù)的讀取操作。為了便于說明,本發(fā)明實施例以PC/SC驅(qū)動程序向設(shè)備管理程序注冊協(xié)議處理器的名稱 為USB Token的協(xié)議處理器名稱為例,即本發(fā)明實施例提供的USB Token的協(xié)議處理器符合該計算機的讀取數(shù)據(jù)的要求。步驟404:伺服程序初始化,創(chuàng)建內(nèi)核對象加載伺服函數(shù)庫,并伺服函數(shù)庫將內(nèi)核對象 下發(fā)給PC/SC驅(qū)動程序。該伺服程序位于計算機系統(tǒng)的應(yīng)用層;步驟405:監(jiān)控程序判斷USB Token是否與計算機建立連接,如果是,則執(zhí)行步驟406; 否則,執(zhí)行步驟416;其中,在該歩驟中判斷USB Token是否與計算機建立連接可以采用如下的方式 采用回調(diào)函數(shù)的方式,實現(xiàn)伺服程序通過回調(diào)函數(shù)獲取HID/SCSI設(shè)備與計算機的連接狀態(tài);采用監(jiān)控注冊表的方式,通過監(jiān)控注冊表,實現(xiàn)伺服程序通過對注冊表指定位置的監(jiān)控獲取HID/SCSI設(shè)備與計算機的連接狀態(tài)。本發(fā)明實施例不限制實現(xiàn)判斷USB Token是否與計算機建立連接時所采用的具體方式。 歩驟406:伺服程序?qū)SB Token的信息報告給PC/SC驅(qū)動程序; 其中,在步驟406中,USB Token的信息主要為USB Token中協(xié)議處理器的信息。 步驟407: PC/SC驅(qū)動程序?qū)SB Token的信息報告給計算機系統(tǒng)的設(shè)備管理器; 由于伺服函數(shù)庫在初始化過程中,首先創(chuàng)建內(nèi)核對象,伺服函數(shù)庫通過函數(shù)將內(nèi)核對象下發(fā)給PC/SC驅(qū)動程序,以進行后續(xù)的數(shù)據(jù)交互。具體為-〃創(chuàng)建發(fā)送數(shù)據(jù)的內(nèi)涵對象hEvents. hEventSnd = CreateEvent(NULL, FALSE, FALSE, 〃FTSmcSnd〃); 〃創(chuàng)建接受數(shù)據(jù)的內(nèi)涵對象hEvents. hEventRcv = CreateEvent(NULL, FALSE, FALSE, 〃FTSmcRcv〃); 伺服函數(shù)庫通過DeviceIoControl ()將內(nèi)核對象下發(fā)給PC/SC驅(qū)動程序,以進行后續(xù) 的數(shù)據(jù)交互。 DeviceloControl (hFile, 〃設(shè)備句柄IOCTL—FTSMC—SET_EVENTS, 〃 10控制代碼&hEvents, 〃輸入緩沖區(qū)sizeof (FTSMC—SHARED_EVENTS), 〃輸入數(shù)據(jù)長度NULL, 〃輸出緩沖區(qū)0, 〃輸出緩沖區(qū)大小.&dwReturn, 〃實際輸出數(shù)據(jù)長度NULL );歩驟408:伺服程序等待內(nèi)核對象以接收或發(fā)送指令數(shù)據(jù); 〃驅(qū)動層設(shè)置事件,通知伺服程序,有數(shù)據(jù)下發(fā),請接受KeSetEvent(hEventSnd' 0, FALSE); 〃伺服程序 while (true) {〃等待內(nèi)核對象事件if (WAIT—OBJECT—0 + 1 == WaitForMultipleObjects(2, handles, FALSE, INFINITE))return 0; 〃退出〃獲取內(nèi)核驅(qū)動對象攜帶的數(shù)據(jù)ReadFile(g—hFile, g—snd, sizeof(g_snd), &dwRead, NULL); 〃根據(jù)內(nèi)核對象攜帶的信息,對數(shù)據(jù)做不同的處理 Switch ( KernelFunc )Case 0:break;Default:break;〃將處理結(jié)果反饋給內(nèi)核驅(qū)動對象WriteFile(g—hFile, g—rev, rcvLen, &dwWritten, NULL); 〃告知驅(qū)動對象,可以獲取返回的數(shù)據(jù)了 SetEvent(hEventRcv);步驟409: PC/SC驅(qū)動程序接收到計算機的應(yīng)用程序下發(fā)的訪問USB Token的指令; 歩驟410: PC/SC驅(qū)動程序?qū)?yīng)用程序下發(fā)的訪問USB Token的指令通過內(nèi)核對象報告給伺服程序;步驟411:伺服程序接收到訪問USB Token的指令后,調(diào)用伺服函數(shù)庫,運行伺服函數(shù) 庫中的打開、啟用、查詢或關(guān)閉指令; 打開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))〃査詢指定的設(shè)備狀態(tài)〃操作失敗g_LibStatus = STATUS—LIB_QUERY—FAILED; return FALSE;6lS6〃操作成功g_LibStatus 二 STATUS_LIB_QUERY—OK;關(guān)閉-if( !FinalizeFTSmcLib()) 〃操作失敗g—LibStatus = STATUS—LIB—CLOSE—FAILED; return FALSE;〃操作成功g_LibStatus = STATUS—LIB—CLOSE—OK;步驟412:伺服函數(shù)庫向伺服程序提供調(diào)用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:應(yīng)用程序通過PC/SC驅(qū)動程序及伺服程序經(jīng)PC/SC接口對USB Token進行訪 問;其中,訪問具體包括1) 打開與USB Token的連接;2) 關(guān)閉與USB Token的連接;3) 獲取USB Token的復(fù)位應(yīng)答,即ATR (Answer To Reset,響應(yīng)復(fù)位);4) 與USB Token進行APDU交互。其中,APDU (Application Protocol Data Unit,應(yīng) 用協(xié)議數(shù)據(jù)單元)在OSI參考模型的第七層,是應(yīng)用層進行信息交換時所使用的基本信息單元。其中,打開與USB Token的連接時,可以采用如下方式SCardConnect(ContextHandle, 〃所述設(shè)備管理器上下文句柄strFTSmcReader, 〃所述PC/SC驅(qū)動名SCARD—SHARE—SHARED,〃訪問模式SCARD—PROTOCOL—TO | SCARD—PROTOCOL—Tl, 〃通訊協(xié)議選擇 &CardHandle, 〃返回的卡句柄&ActiVeProtocol); 〃返回的當前卡片應(yīng)用協(xié)議關(guān)閉與USB Token的連接時,可以采用如下方式 SCardDisco皿ect(CardHandle, SCARD—EJECT—CARD); 獲取USB Token的復(fù)位應(yīng)答(取ATR)時,可以采用如下方式:SCardStatus(CardHandle,strFTSmcReader, &dwLength, &dwCardState, &dwActiveProtocol,〃卡句柄〃所述PC/SC驅(qū)動名 〃數(shù)據(jù)長度 〃卡狀態(tài)〃當前協(xié)議pbyATR, 〃復(fù)位應(yīng)答緩沖區(qū)ftckATRLength); 〃實際應(yīng)答信息長度執(zhí)行與USB Token進行APDU數(shù)據(jù)交互時,可以采用如下方式 SCardTransmit (CardHandle, //卡句柄&I0—Request, 〃 SCARD_I0—REQUEST信息(PUCHAR)SendData, 〃下發(fā)的指令緩沖區(qū) nCmdLen , 〃指令緩沖區(qū)大小NULL, 〃返回的SCARD_IO_REQUEST信息(PUCHAR)ReceiveData, 〃接收數(shù)據(jù)緩沖區(qū) toRespLen); 〃接收數(shù)據(jù)緩沖區(qū)大小步驟414:伺服程序獲取USB Token中的數(shù)據(jù)后,通過內(nèi)核對象將該數(shù)據(jù)傳送給PC/SC驅(qū) 動程序;可以采用如下方式〃驅(qū)動層等待數(shù)據(jù)返回KeWaitForSingleObject ( hEventRcv, Executive, KernelMode, FALSE, pDueTime);〃驅(qū)動層數(shù)據(jù)返回后,將數(shù)據(jù)反饋給上層緩沖區(qū)RtlCopyMemory (......);〃步驟415: PC/SC驅(qū)動程序通過系統(tǒng)設(shè)備管理器將USB Token中數(shù)據(jù)傳送給應(yīng)用程序。 當USB Token與計算機建立聯(lián)系后,通過上述步驟406至415實現(xiàn)了計算機的應(yīng)用程序 和該USB Token的數(shù)據(jù)交互過程。步驟416:等待USB Token與主機建立連接。如圖4所示,當?shù)却経SB Token與主機建立連接后,執(zhí)行步驟406至步驟415。 通過本實施例,具體說明了 HID/SCSI設(shè)備PC/SC接口的實現(xiàn)原理,其中,上述本發(fā)明實 施例在實現(xiàn)時,是采用伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫實現(xiàn)的,本領(lǐng)域技術(shù)人員還可以獲知,伺服程序還可以通過采用創(chuàng)建文件對象方式實現(xiàn)加載伺服函數(shù)庫;當采用采用創(chuàng) 建文件對象方式實現(xiàn)時,相應(yīng)地,位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函 數(shù)庫,伺服函數(shù)庫將創(chuàng)建的內(nèi)核對象發(fā)送給PC/SC驅(qū)動程序的步驟,具體為位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫,伺服函數(shù)庫將創(chuàng)建的文 件對象發(fā)送給PC/SC驅(qū)動程序;相應(yīng)地,PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問HID/SCSI設(shè)備的指令,通 過內(nèi)核對象發(fā)送給伺服程序的歩驟,具體為PC'/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問HID/SCSI設(shè)備的指令,通過文件對 象發(fā)送給伺服程序;相應(yīng)地,位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫之前,還包括 計算機啟動加載PC/SC驅(qū)動程序信息至計算機內(nèi)存;計算機設(shè)備管理程序從計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息;PC/SC驅(qū)動程序向設(shè)備管理程序注冊協(xié)議處理器的標識。當采用創(chuàng)建文件對象方式,實現(xiàn)伺服程序加載伺服函數(shù)庫時,相應(yīng)地,方法還包括計算機中的應(yīng)用層的伺服程序獲取HID/SCSI設(shè)備中的數(shù)據(jù),通過文件對象將數(shù)據(jù)發(fā)送給PC/SC驅(qū)動程序;PC/SC驅(qū)動程序通過設(shè)備管理程序?qū)ID/SCSI設(shè)備中的數(shù)據(jù)發(fā)送給應(yīng)用程序。 綜上所述,本發(fā)明實施例提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法,通過將HID/SCSI 接口指令從PC/SC驅(qū)動程序中分離出來,利用伺服模塊來調(diào)用HID/SCSI接口指令,為計算機 提供了一條訪問HID/SCSI設(shè)備的通道,進而實現(xiàn)HID/SCSI設(shè)備通過PC/SC接口與計算機進 行通信的過程,由于伺服模塊中的伺服程序運行在系統(tǒng)應(yīng)用層,因此伺服程序的編寫、修改 以及維護都較為簡單,伺服程序的運行過程中發(fā)生錯誤,不會導(dǎo)致整個系統(tǒng)的崩潰;當需要 支持新的HID/SCSI設(shè)備時,只需通過更換伺服程序就可以實現(xiàn)計算機系統(tǒng)對新設(shè)備的兼容, 大大增強了系統(tǒng)的柔韌性和擴展性。另外,設(shè)計人員可以利用伺服函數(shù)庫的功能使程序不至 于太過巨大,比如,多個應(yīng)用程序可以共享伺服函數(shù)庫中的函數(shù),其中,伺服函數(shù)庫以一種 自然的方式將一個大的應(yīng)用程序劃分為幾個小的部分,有利于內(nèi)部的分工與合作,各個部分 可以獨立升級等等。實施例5相應(yīng)與本發(fā)明實施例2所提供的實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng),本發(fā)明實施例提供了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法,該方法中,在應(yīng)用層伺服程序中通過設(shè)置多 個伺服函數(shù)庫,不同的伺服函數(shù)庫由同一個應(yīng)用層伺服程序?qū)ζ溥M行調(diào)用,每個伺服函數(shù)庫 對應(yīng)不同的USB Token,從而實現(xiàn)應(yīng)用程序?qū)Χ鄠€USB Token的訪問。其中,所謂的不同的 USB Token是指具有不同的其中具有不同的協(xié)議處理器名稱的HID/SCSI設(shè)備。通過本發(fā)明實施例提供的方法,若要實現(xiàn)對不同的USB Token的訪問,只需通過PC/SC驅(qū) 動程序向設(shè)備管理程序注冊USB Token中相應(yīng)協(xié)議處理器的名稱,便可實現(xiàn)應(yīng)用程序?qū)Σ煌?USB Token的訪問,具體流程參見實施例3。本領(lǐng)域技術(shù)人員可以獲知,由于PC/SC驅(qū)動程 序位于計算機系統(tǒng)的內(nèi)核層,所以在實現(xiàn)向設(shè)備管理程序注冊USB Token中相應(yīng)協(xié)議處理器 的名稱時,需要重新啟動計算機。本發(fā)明實施例中的"接收" 一詞可以理解為主動從其他模塊獲取也可以是接收其他模塊 發(fā)送來的信息。本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流程并不 一定是實施本發(fā)明所必需的。本領(lǐng)域技術(shù)人員可以理解實施例中的系統(tǒng)(或設(shè)備)中的模塊可以按照實施例描述分布 于實施例的系統(tǒng)(或設(shè)備)中,也可以進行相應(yīng)變化位于不同于本實施例的一個或多個系統(tǒng) (或設(shè)備)中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。本發(fā)明實施例中的部分步驟,可以利用軟件實現(xiàn),相應(yīng)的軟件程序可以存儲在可讀取的 存儲介質(zhì)中,如光盤或硬盤等。
權(quán)利要求
1、一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng),其特征在于,所述系統(tǒng)包括伺服模塊、PC/SC驅(qū)動模塊、設(shè)備管理模塊和應(yīng)用程序模塊;所述伺服模塊,用于將計算機獲取的所述HID/SCSI設(shè)備的信息上報給所述PC/SC驅(qū)動模塊,并提供所述HID/SCSI設(shè)備和所述PC/SC驅(qū)動模塊之間的數(shù)據(jù)交互通道;所述PC/SC驅(qū)動模塊,用于將所述伺服模塊報告的所述HID/SCSI設(shè)備的信息,上報給所述設(shè)備管理模塊,并提供所述伺服模塊和所述設(shè)備管理模塊之間的數(shù)據(jù)交互通道;所述設(shè)備管理模塊,用于將所述PC/SC驅(qū)動模塊報告的所述HID/SCSI設(shè)備的信息,上報給所述應(yīng)用程序模塊;并向所述應(yīng)用程序模塊提供訪問所述HID/SCSI設(shè)備的接口信息;所述應(yīng)用程序模塊,用于根據(jù)所述設(shè)備管理模塊報告的所述HID/SCSI設(shè)備的信息和提供的訪問所述HID/SCSI設(shè)備的接口信息,訪問所述HID/SCSI設(shè)備。
2、 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述伺服模塊位于所述系統(tǒng)的應(yīng)用層,所述 伺服模塊包括伺服函數(shù)庫單元和監(jiān)控單元;伺服函數(shù)庫單元,用于通過提供HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行 HID/SCSI協(xié)議處理,獲取所述HID/SCSI設(shè)備的信息及實現(xiàn)數(shù)據(jù)交互;其中,所述HID接口 設(shè)備描述符,用于向所述計算機聲明設(shè)備類型具體為HID設(shè)備類型,并解析處理HID命令; 所述SCSI接口設(shè)備描述符,用于向所述計算機聲明設(shè)備類型具體為SCSI設(shè)備類型,并解析 處理SCSI命令;監(jiān)控單元,用于監(jiān)控所述HID/SCSI設(shè)備和所述計算機的連接狀態(tài)。
3、 如權(quán)利要求2所述的系統(tǒng),其特征在于,所述監(jiān)控單元具體為 第一監(jiān)控子單元,用于實現(xiàn)所述伺服模塊所提供的伺服程序通過回調(diào)函數(shù)獲取所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài);或,第二監(jiān)控子單元,用于監(jiān)控注冊表,實現(xiàn)所述伺服模塊所提供的伺服程序通過對所述注 冊表指定位置的監(jiān)控獲取所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài)。
4、 如權(quán)利要求2所述的系統(tǒng),其特征在于,所述伺服函數(shù)庫單元至少為一個, 當所述伺服函數(shù)庫單元為多個時,每個伺服函數(shù)庫單元用于通過各自提供的HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行HID/SCSI協(xié)議處理,獲取各自對應(yīng)的HID/SCSI設(shè)備 的信息及實現(xiàn)數(shù)據(jù)交互。
5、 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述設(shè)備管理模塊還包括緩沖存儲單元,所述緩沖存儲單元用于緩存系統(tǒng)當前可用的智能卡SC協(xié)議處理器的標識。
6、 一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的方法,其特征在于,所述方法包括位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫,所述伺服函數(shù)庫將創(chuàng)建的內(nèi)核對象發(fā)送給PC/SC驅(qū)動程序;當所述伺服程序獲知HID/SCSI設(shè)備與所述計算機建立連接后,通過所述PC/SC驅(qū)動程序 向計算機設(shè)備管理程序上報所述HID/SCSI設(shè)備的信息;所述計算機設(shè)備管理程序根據(jù)所述HID/SCSI設(shè)備的信息,判斷所述HID/SCSI設(shè)備符合 訪問要求后,所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備 的指令,通過所述內(nèi)核對象發(fā)送給所述伺服程序;所述伺服程序接收所述訪問指令,調(diào)用伺服函數(shù)庫,獲取所述伺服函數(shù)庫中調(diào)用HID/SCSI接口指令的代碼信息;所述應(yīng)用程序通過所述PC/SC驅(qū)動程序和伺服程序,經(jīng)PC/SC接口對所述HID/SCSI設(shè) 備進行訪問。
7、 如權(quán)利要求6所述的方法,其特征在于,所述位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫之前,還包括計算機啟動,加載PC/SC驅(qū)動程序信息至計算機內(nèi)存; 計算機設(shè)備管理程序從所述計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息; 所述PC/SC驅(qū)動程序向所述設(shè)備管理程序注冊協(xié)議處理器的標識; 相應(yīng)地,所述判斷所述HID/SCSI設(shè)備符合訪問要求,具體為根據(jù)所述HID/SCSI設(shè)備的信息中攜帶的HID/SCSI設(shè)備的協(xié)議處理器的標識,判斷所述 標識是否和注冊的標識匹配,如果是,則所述HID/SCSI設(shè)備符合訪問要求;否則,所述 HID/SCSI設(shè)備不符合訪問要求。
8、 如權(quán)利要求6所述的方法,其特征在于,所述方法還包括所述計算機中的應(yīng)用層的伺服程序獲取HID/SCSI設(shè)備中的數(shù)據(jù),通過內(nèi)核對象將所述數(shù) 據(jù)發(fā)送給所述PC/SC驅(qū)動程序;所述PC/SC驅(qū)動程序通過所述設(shè)備管理程序?qū)⑺鯤ID/SCSI設(shè)備中的數(shù)據(jù)發(fā)送給所述 應(yīng)用程序。
9、 如權(quán)利要求6所述的方法,其特征在于,所述經(jīng)PC/SC接口對所述HID/SCSI設(shè)備進行訪問具體為打開與所述HID/SCSI設(shè)備的連接;或,關(guān)閉與所述HID/SCSI設(shè)備的連接;或, 獲取所述HID/SCSI設(shè)備的復(fù)位應(yīng)答;或, 與所述HID/SCSI設(shè)備進行APDU交互。
10、 如權(quán)利要求6所述的方法,其特征在于,所述伺服函數(shù)庫為多個時,每個伺服函數(shù) 庫用于通過各自提供的HID接口設(shè)備描述符/SCSI接口設(shè)備描述符,進行HID/SCSI協(xié)議處理, 獲取各自對應(yīng)的HID/SCSI設(shè)備的信息,實現(xiàn)數(shù)據(jù)交互。
11、 如權(quán)利要求6所述的方法,其特征在于,所述伺服程序加載所述伺服函數(shù)庫的方法 還可以為創(chuàng)建文件對象方式;相應(yīng)地,所述位于計算機應(yīng)用層的伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫,所述伺服 函數(shù)庫將創(chuàng)建的內(nèi)核對象發(fā)送給PC/SC驅(qū)動程序的步驟,具體為位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫,所述伺服函數(shù)庫將創(chuàng)建 的文件對象發(fā)送給PC/SC驅(qū)動程序;相應(yīng)地,所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備 的指令,通過所述內(nèi)核對象發(fā)送給伺服程序的步驟,具體為所述PC/SC驅(qū)動程序?qū)⒔邮盏挠嬎銠C應(yīng)用程序下發(fā)的訪問所述HID/SCSI設(shè)備的指令, 通過所述文件對象發(fā)送給伺服程序;相應(yīng)地,所述位于計算機應(yīng)用層的伺服程序創(chuàng)建文件對象并加載伺服函數(shù)庫之前,還包括計算機啟動,加載PC/SC驅(qū)動程序信息至計算機內(nèi)存; 計算機設(shè)備管理程序從計算機內(nèi)存獲取系統(tǒng)中的PC/SC驅(qū)動程序信息; 所述PC/SC驅(qū)動程序向所述設(shè)備管理程序注冊協(xié)議處理器的標識。
12、 如權(quán)利要求ll所述的的方法,其特征在于,所述方法還包括計算機中的應(yīng)用層的伺服程序獲取HID/SCSI設(shè)備中的數(shù)據(jù),通過文件對象將所述數(shù)據(jù)發(fā) 送給所述PC/SC驅(qū)動程序;所述PC/SC驅(qū)動程序通過所述設(shè)備管理程序?qū)⑺鯤ID/SCSI設(shè)備中的數(shù)據(jù)發(fā)送給所述 應(yīng)用程序。
13、 如權(quán)利要求6所述的方法,其特征在于,所述伺服程序向計算機設(shè)備管理程序上報 所述HID/SCSI設(shè)備的信息之前,還包括所述伺服程序監(jiān)控所述HID/SCSI設(shè)備與所述計算 機的連接狀態(tài),具體為所述伺服程序通過回調(diào)函數(shù)獲取所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài);和/或,所述伺服程序通過對所述注冊表指定位置的監(jiān)控,獲取所述HID/SCSI設(shè)備與所述計算機的連接狀態(tài)。
全文摘要
本發(fā)明公開了一種實現(xiàn)HID/SCSI設(shè)備PC/SC接口的系統(tǒng)和方法,屬于通信安全領(lǐng)域。所述方法包括伺服程序創(chuàng)建內(nèi)核對象并加載伺服函數(shù)庫,將內(nèi)核對象發(fā)送給PC/SC驅(qū)動程序;伺服程序通過PC/SC驅(qū)動程序向計算機設(shè)備管理程序上報HID/SCSI設(shè)備的信息;PC/SC驅(qū)動程序?qū)⒔邮盏脑L問HID/SCSI設(shè)備的指令,通過內(nèi)核對象發(fā)送給伺服程序;伺服程序接收訪問指令,獲取伺服函數(shù)庫中調(diào)用HID/SCSI接口指令的代碼信息;應(yīng)用程序通過PC/SC驅(qū)動程序和伺服程序,經(jīng)PC/SC接口對HID/SCSI設(shè)備進行訪問。由于伺服程序運行在系統(tǒng)應(yīng)用層,其編寫、修改、維護簡單,在其運行過程中發(fā)生錯誤不會導(dǎo)致整個系統(tǒng)的崩潰;當需要支持新的HID/SCSI設(shè)備時,只需更換伺服程序就可以實現(xiàn)對新設(shè)備的兼容,增強了系統(tǒng)的柔韌性和擴展性。
文檔編號G06F13/42GK101329661SQ20081011748
公開日2008年12月24日 申請日期2008年7月31日 優(yōu)先權(quán)日2008年7月31日
發(fā)明者于華章, 舟 陸 申請人:北京飛天誠信科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1