1. gzyueqian
      18078865874
      首頁 > 新聞中心 > > 正文

      基于ATL的智能卡中間件的實現

      更新時間: 2007-07-19 13:35:14來源: 粵嵌教育瀏覽量:850

        摘 要:COM(組件對象模型)為組件的開發和應用提供了一個標準平臺。介紹了智能卡和其基于ATL(活動模板庫)的 COM組件的實現,重點闡述其實現過程和實現流程,簡述中間件的應用。該組件封裝智能卡COS(片內操作系統),并以dll文件形式提供給用戶,增強了組件的重用性,且方便系統升級和擴展。

        關鍵詞:智能卡 ;組件對象模型;活動模板庫;片內操作系統

        智能卡(Smart Card),即IC卡,它將存儲和處理信息數據的芯片鑲嵌于塑料基片中,具有標準信用卡大小。智能卡存儲容量大、安全性高、壽命長、適應性強、應用范圍廣,但其的特點是:在保持安全的情況下,一卡多用。在現階段,CPU卡是使用廣泛的智能卡,卡中包含:CPU、E2PROM、RAM以及固化在ROM中的片內操作系統(COS)。

        在智能卡中,COS遵循ISO/IEC7816規范,它主要負責存儲空間管理、文件系統管理和安全管理。雖然COS提供了智能卡底層接口的實現,但如果用戶使用不同的操作系統、讀卡器或開發平臺,這就需要為不同的用戶開發不同的應用軟件,這樣勢必極大地增加軟件開發的工作量,同時給用戶的使用帶來不便。那么,能否開發一種通用的智能卡軟件呢?智能卡中間件就是答案。

        由于智能卡COS是硬件相關的,此時,藉用COM技術對COS進行封裝,使之成為智能卡中間件。這樣,降低了智能卡應用的難度,擴展了智能卡應用的廣度。圖1體現了中間件的邏輯位置以及調用層次關系。

      圖1中間件調用層次圖

        1  COM技術概述

        根據組件化程序設計思想,一個大型的應用程序劃分為多個模塊,且每個模塊保持一定的功能獨立性,在協同工作的同時通過相互之間的接口完成實際的任務,這樣每一個獨立的模塊叫組件。當所有的組件開發完畢,將它們裝配在一起便成為一個完整的系統。當軟硬件環境發生變化或用戶需求有所改變時,只需要對受影響的個別組件進行修改,重新組裝即可完成系統的更改。

        COM(Component Object Model)是微軟開發的公共組件標準,該標準包括規范和實現兩大部分。規范部分定義了怎樣以獨立于語言和獨立于位置的方式調用對象,怎樣定位和標識組件,以及怎樣創建組件對象。實現部分主要是COM庫(包含于ole32.dll和rpcss.dll中),它提供系統服務,具體包括:定位和裝入組件,執行進程間通信和遠程通信等工作。

        在Windows平臺上,COM組件以dll或exe文件形式發布,當組件在操作系統的注冊表中注冊后,用戶可以像使用標準ActiveX控件一樣享受其服務。應該注意的是,COM對象只通過接口提供服務,提供服務同時隱藏了其內部實現,這就不同于C++對象在源代碼級上的封裝,COM對象實現的必須是二進制級上的封裝。根據COM規范,COM對象接口(簡稱COM接口)能自我描述,且不依賴具體實現對象,并且需要消除接口調用與接口實現之間的耦合,這就要求COM接口用一種與具體實現語言無關的語言來定義,該語言就是IDL(Interface Definition Language)。另外,按照COM規范,COM對象和接口必須被標識,對象標識符稱為CLSID,接口標識符稱為IID,兩者都是由生成的128二進制位的GUID來標識(Global unique identifier,基于概率的算法保證其全球性)。

        2 COM接口及對象的創建

        任何COM接口都是從一個IUnknown接口(也叫未知接口)繼承。IUnknown接口包含三個成員函數:QueryInterface()、AddRef()和Release()。三者十分重要,不可或缺,QueryInterface ()用于查詢組件實現的其它接口,AddRef()用于增加引用計數,Release()用于減少引用計數,當引用計數減為零時,接口自動在內存中釋放組件本身。

        同時一個COM對象還包括一個叫IClassFactory(類廠)的基本接口,該接口中重要的一個函數就是CreateInstance,它用來創建COM對象的實例,一般情況用戶不會直接調用它。

        還有一個基本的接口叫做IDispatch接口(調度接口)。用來解決不支持指針的上層語言(如腳本語言VBscript,javascript等)的函數調用問題。該接口把每個函數和屬性都編上號,客戶程序將編號傳遞給IDispatch接口完成調用。

        圖2較詳細的說明了創建對象的流程。

      圖2 進程內服務器對象創建流程

        3  基于ATL的中間件創建

        3.1中間件開發工具選擇

        目前,中間件開發有三種方式:(1)COM SDK直接開發;(2)MFC開發;(3)ATL開發。用
      SDK開發工作量大,需仔細了解COM底層原理,且很多重復勞動;MFC開發的組件需要運行時MFC42.dll庫來支持,組件體積大、時間開銷大,且要求是擴展dll;ATL是專用于開發組件的C++模板庫,它將與COM相關的眾多工具集成到統一的編程環境中,ATL利用模板使程序代碼量小,執行效率較高。所以,用ATL開發智能卡組件是一個比較好的選擇。

        3.2中間件軟件結構和主要功能

        為使中間件具有更好的適應性,中間件的軟件采用了分層結構模型。如圖3所示, 應用層為用戶提供API,實現諸如對卡的上、下電操作,密鑰對生成,數據加解密等。智能卡層響應用戶層的請求,向下傳遞信息,同樣也將下層的信息返回給應用層。讀卡器層,由配置文件選擇相應的讀卡器,并將請求向下傳遞。數據傳輸層實現數據傳輸協議。這種分層結構能夠很好的屏蔽硬件之間的差異,靈活性好。

      圖3 中間件分層模型

        該中間件基于智能卡COS所提供的命令接口來進行開發,主要完成一些基本過程:(1)建立文件系統,如建立MF、DF文件和各種EF文件;(2)文件系統操作;(3)身份認證和鑒權;(4)智能卡復位、鎖定和解鎖;(5)密鑰生成,由卡生成RSA密鑰或外部裝入RSA密鑰;(6)讀寫公鑰和私鑰等。

        3.3中間件實現流程 

        VC中的ATL封裝了COM技術細節,提供了AppWizard向導,簡化了難度,同時也支持COM的一些特性,如雙節口、連接點、ActiveX控件等。下面簡述中間件的實現過程。
       
        (1)利用AppWizard創建一個ATL工程。選擇DLL服務器(進程內組件),不需要選擇proxy/stub、MFC和MTS,然后引入底層dll的頭文件,這樣,該程序框架中就包含了一組COM標準所要求的導出函數和一個全局成員:CComModule  _Module.
       
       ?。?)添加一個COM對象,它包含底層對應的眾多接口,如ISCard接口(智能卡指令和相關PC/SC的接口)、IIError接口(錯誤代碼的設置和讀取等功能接口)、IIIOP接口(讀寫器和IC卡資源管理器等功能接口)、IICardProperties接口(智能卡的相關信息接口)。
        
       ?。?)IDL支持自定義結構體,在IDL文件中引入底層智能卡COS自定義的結構體,并加上的UUID,需要刪除底層頭文件中的重復定義。

       ?。?)為各接口添加屬性和方法。注意接口方法要用IDL語言(和C++接近)聲明,從IDL定義的接口代碼需要經過編譯器(MIDL.exe)編譯,編譯后的文件組成如圖4所示。
      除了聲明參數類型外,還要聲明參數的屬性,如屬性修飾[out,retval],表示通知客戶端,該參數必須作為方法調用的返回值被返回。例如:

        HRESULT GenerateRSAKey(const unsigned char wPubKeyFileID,[out,retval] long *bRet);
      屬性修飾缺省的情況下表示輸入參數,const unsigned char wPubKeyFileID省略了 [in]。

      圖4  idl文件編譯結構

       ?。?)實現每個接口中包含的方法,針對該實現,需要實現大量的方法,這個過程是繁瑣的、耗時的,可能需要迭代開發模式,以減少客戶端測試的時間。一個簡化例子如圖5所示:

      圖5 COM層函數的簡單實現

       ?。?)編譯、建造工程,VC自行注冊組件。

         到此,智能卡中間件創建完成。下面還需要建立客戶端程序測試和驗證中間件。

        3.4中間件的應用

        無論在哪種開發環境下使用組件,在二次開發的初期,必須建立COM組件的運行環境。以VC為例,重點說明一種組件運行環境的建立。

        首先引入頭文件*.h(組件接口聲明)和*_i.c(定義組件所有的CLSID和IID);然后初始化COM庫,調用CoCreateInstance()得到所需接口的指針;當客戶端調用完畢,釋放實例,卸載COM庫。

        另一種方式,可以使用#import指令導入類型庫(*.tlb)的方式,此處不再贅述。

        建立COM運行環境后,可實現智能卡的應用。圖6展示了一典型的中間件應用流程:

      圖6 智能卡工作邏輯

        4  結束語

        智能卡中間件利用ATL實現了COM規范。同時注意到,編寫中間件測試程序也是必要的,只有開發和測試交替進行,才能保證組件的可用性。另一方面,在組件結構方面,該組件使用分層模型,這就很好地屏蔽了硬件信息,為用戶提供了一個統一的接口,實現組件的通用性、可擴展性和移植性。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲国产精品久久一线北 | 亚洲有码在线播放 | 亚洲精品在线网站 | 亚洲va中文字幕欧美 | 人伊香蕉久久精品 | 亚洲欧美久久一区二区 |