專利名稱:計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法
技術(shù)領(lǐng)域:
本發(fā)明是有關(guān)于一種計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,特別是一種應(yīng)用于視窗操作系統(tǒng)(Windows)之下執(zhí)行的應(yīng)用程序,通過在應(yīng)用程序之進(jìn)程中注入一鉤接函數(shù)的手段,實(shí)現(xiàn)對應(yīng)用程序的中斷,并且達(dá)成擴(kuò)充功能之目的。
在傳統(tǒng)技術(shù)中,擴(kuò)充應(yīng)用軟件之功能的實(shí)現(xiàn)方法,大致包括下列兩種1.修改應(yīng)用程序的原始程序,重新對修改后的原始程序進(jìn)行編譯(Compile)以及鏈接(Link),這種方法需要程序設(shè)計(jì)師經(jīng)過復(fù)雜的編寫過程,才可以完成應(yīng)用程序的功能擴(kuò)充,對程序設(shè)計(jì)師而言是一種挑戰(zhàn),應(yīng)用程序的開發(fā)成本較高,并且只能對單一應(yīng)用程序進(jìn)行功能擴(kuò)充,而難以實(shí)現(xiàn)對多個(gè)程序完成相同功能的擴(kuò)充。
2.對原始程序的二進(jìn)制碼儲(chǔ)存格式分析,編寫一段可以提供擴(kuò)充功能的擴(kuò)充程序碼,再修改原始程序的進(jìn)入點(diǎn)(Entry Point,即原始程序開始執(zhí)行的起點(diǎn)),使修改之后的進(jìn)入點(diǎn)與擴(kuò)充程序碼相呼應(yīng),指向擴(kuò)充程序碼開始執(zhí)行的位置,實(shí)現(xiàn)對原始應(yīng)用程序擴(kuò)充功能的目的;但是這種方式,必須對原始應(yīng)用程序進(jìn)行部份的修改,不但具有相當(dāng)?shù)睦щy度,也會(huì)對原始應(yīng)用程序造成潛在的危害,甚至提供了計(jì)算機(jī)病毒侵入的界面(Interface)。
本發(fā)明的主要目的,在提供一種既不需要使用中斷例程(InterruptRoutine),也不需要修改應(yīng)用程序之原始程序,就可以實(shí)現(xiàn)擴(kuò)充應(yīng)用程序之軟件功能的方法。
本發(fā)明的另一目的,在提供一種通過在應(yīng)用程序的進(jìn)程中注入一鉤接函數(shù),實(shí)現(xiàn)動(dòng)態(tài)地修正或更換應(yīng)用程序之軟件功能的方法,具有即時(shí)性與跨平臺(tái)性(Cross Platform)。
根據(jù)本發(fā)明所披露的技術(shù),是將一種可以呼叫某一動(dòng)態(tài)鏈接程序庫(DLL)的鉤接函數(shù)注入應(yīng)用程序的進(jìn)程之中,通過在應(yīng)用程序的執(zhí)行過程中,根據(jù)使用者之需要而啟動(dòng)這個(gè)鉤接函數(shù)的方式,執(zhí)行動(dòng)態(tài)鏈接程序庫(DLL),而實(shí)現(xiàn)擴(kuò)充應(yīng)用程序之功能的目的。
有關(guān)本發(fā)明的詳細(xì)技術(shù)內(nèi)容與實(shí)施例,茲配合
如后。
圖式說明圖1是應(yīng)用程序在視窗操作系統(tǒng)中的運(yùn)作功能方塊圖。
圖2是應(yīng)用程序的進(jìn)程結(jié)構(gòu)示意圖。
圖3是本發(fā)明的主要步驟流程圖。
圖4是本發(fā)明之實(shí)施例流程圖,顯示通過鉤接函數(shù)中斷應(yīng)用程序的運(yùn)作流程圖。
圖5是本發(fā)明之實(shí)施例流程圖,顯示通過鉤接函數(shù)呼叫功能擴(kuò)充模組的運(yùn)作流程圖。
圖6顯示一種圖形操作界面的實(shí)施例。
圖7顯示另一種圖形操作界面的實(shí)施例。
在視窗操作系統(tǒng)中,應(yīng)用程序(APP,Application)在收到外來的消息(Message)之后,其運(yùn)作過程的功能方塊圖如‘圖1’所示,當(dāng)視窗操作系統(tǒng)(10)收到外來的消息(11)(如使用者輸入的操作消息),或是來自于應(yīng)用程序回應(yīng)的消息(12)之后,注入應(yīng)用程序之進(jìn)程中的鉤接函數(shù)(13)將會(huì)接收此一消息并且作出回應(yīng),然后由相應(yīng)的鉤接函數(shù)(13)呼叫一用以對原應(yīng)用程序提供擴(kuò)充功能的功能擴(kuò)充界面(14)(如動(dòng)態(tài)鏈接程序庫(DLL)或是一種圖形操作界面(GUI,Graphics UserInterface)),通過這個(gè)功能擴(kuò)充界面(14)可與各種不同用途的功能擴(kuò)充程序(15)鏈接,如保護(hù)程序、進(jìn)程監(jiān)控程序、多媒體輔助程序等,以實(shí)現(xiàn)對原始應(yīng)用程序進(jìn)行功能擴(kuò)充的目的,并且在功能擴(kuò)充程序執(zhí)行完畢之后,將控制權(quán)交還給系統(tǒng)或是應(yīng)用程序,而不會(huì)影響到原應(yīng)用程序的功能與完整性。
應(yīng)用程序(APP)的執(zhí)行過程實(shí)際上就是一種消息的循環(huán)過程,當(dāng)一個(gè)應(yīng)用程序(APP)被啟動(dòng)時(shí),會(huì)判斷是否接收到系統(tǒng)發(fā)來的消息,如果接收到系統(tǒng)的消息,則將這個(gè)消息傳送到應(yīng)用程序(APP),并且等待下一個(gè)系統(tǒng)的消息,如果沒有新的系統(tǒng)消息被載入,則應(yīng)用程序(APP)便處于等待狀態(tài),而系統(tǒng)消息與應(yīng)用程序(APP)本身之間的聯(lián)系,則可通過進(jìn)程來表示,將系統(tǒng)消息作用于應(yīng)用程序的過程視為進(jìn)程(Process),此一進(jìn)程的結(jié)構(gòu)如‘圖2’所示,當(dāng)系統(tǒng)消息滿足鉤接函數(shù)1(Hook1)的要求,則通過鉤接函數(shù)1(Hook1)指向(Pointer)動(dòng)態(tài)鏈接程序庫1(DLL1),按照(DLL1)中的內(nèi)容運(yùn)行應(yīng)用程序(APP),等到(DLL1)的內(nèi)容執(zhí)行完畢后,再將控制權(quán)轉(zhuǎn)到下一個(gè)鉤接函數(shù)2(Hook2),同樣地再根據(jù)(Hook2)指向動(dòng)態(tài)鏈接程序庫2(DLL2),執(zhí)行(DLL2)的內(nèi)容,依此類推,依序傳遞控制權(quán),直到?jīng)]有要執(zhí)行的鉤接函數(shù)為止,而本發(fā)明正是根據(jù)這一特點(diǎn),將一鉤接函數(shù),注入進(jìn)程中,以實(shí)現(xiàn)對原應(yīng)用程序的中斷,進(jìn)而達(dá)成功能擴(kuò)充。
根據(jù)本發(fā)明所披露之方法,包括有將至少一鉤接函數(shù)注入應(yīng)用程序之進(jìn)程的手段;執(zhí)行相應(yīng)之鉤接函數(shù)的手段,例如通過一圖形操作界面(GUI)提供使用者可選取的操作選項(xiàng),依據(jù)該選項(xiàng)的內(nèi)容產(chǎn)生一個(gè)消息,而執(zhí)行與此一消息相應(yīng)的鉤接函數(shù);以及執(zhí)行鉤接函數(shù)所指向之功能擴(kuò)充模組的手段。
其實(shí)施的流程如‘圖3’所示,根據(jù)流程圖可分為三個(gè)階段a.鉤接函數(shù)(Hook)的注入階段;b.配置文件(Config File)的載入階段;以及c.控制權(quán)轉(zhuǎn)移階段。
當(dāng)視窗操作系統(tǒng)獲得一消息(如使用者自鍵盤、鼠標(biāo)或其他計(jì)算機(jī)輸入設(shè)備輸入的操作消息),會(huì)依序調(diào)用系統(tǒng)函數(shù),并且載入應(yīng)用程序之進(jìn)程中的鉤接函數(shù)(步驟30),當(dāng)讀到本發(fā)明所提供的鉤接函數(shù)后,由于該鉤接函數(shù)中已經(jīng)注入了用于功能擴(kuò)充的動(dòng)態(tài)鏈接程序庫(DLL),所以按照這個(gè)動(dòng)態(tài)鏈接程序庫(DLL)的內(nèi)容,讀取配置文件(ConfigFile)的相關(guān)部分,取出其中的功能擴(kuò)充模組(Module)(步驟31),判斷是否禁止擴(kuò)充功能(步驟32),如果禁止擴(kuò)充功能,則等待激活(Enable)消息,并取消擴(kuò)充功能(步驟33);如果允許,則功能擴(kuò)充模組開始工作,并調(diào)用相關(guān)處理參數(shù)(Parameter),等待視窗操作系統(tǒng)將此一參數(shù)寫入應(yīng)用程序的地址空間(Addressing Space)(步驟34),判斷是否為第一次載入(步驟35),如果是第一次載入相關(guān)參數(shù),則將這個(gè)參數(shù)所表示的功能擴(kuò)充模組載入(Load)應(yīng)用程序的地址空間(步驟36),啟動(dòng)擴(kuò)充功能(步驟37),完成擴(kuò)充功能后,等待系統(tǒng)發(fā)出離開應(yīng)用程序的退出消息(Exit)(步驟38);而如果視窗操作系統(tǒng)判斷不是第一次載入相關(guān)參數(shù),則會(huì)將控制權(quán)傳給下一級鉤接函數(shù)(步驟39),然后重復(fù)(步驟30),再根據(jù)這個(gè)鉤接函數(shù)所指向之(DLL)的處理結(jié)果,以便決定是否將控制權(quán)交還應(yīng)用程序繼續(xù)執(zhí)行,或是結(jié)束應(yīng)用程序;所以根據(jù)本發(fā)明所披露的方法,將會(huì)在啟動(dòng)功能擴(kuò)充模組時(shí)將控制權(quán)自應(yīng)用程序交予功能擴(kuò)充模組,當(dāng)功能擴(kuò)充模組依據(jù)執(zhí)行結(jié)果將控制權(quán)交回應(yīng)用程序,則又可以完全地回到原來的應(yīng)用程序中,繼續(xù)進(jìn)行原應(yīng)用程序的功能,如此循環(huán)。
實(shí)施例說明下面本發(fā)明以一具體實(shí)施例,說明本發(fā)明之技術(shù)應(yīng)用在視窗操作系統(tǒng)之中某一應(yīng)用程序的情形。
此一實(shí)施例的目的是為了實(shí)現(xiàn)對應(yīng)用程序的即時(shí)保護(hù),亦即是此一應(yīng)用程序本身并未提供加鎖保護(hù)的功能,而通過本發(fā)明的方法則可以讓使用者在啟動(dòng)應(yīng)用程序之初,借助另一軟件保護(hù)程序(ProtectedApplication)的執(zhí)行,提供使用者決定是否以設(shè)定的密碼進(jìn)行操作鎖定的功能。以本發(fā)明所提供的軟件保護(hù)程序?yàn)槔?,將?huì)在應(yīng)用程序啟動(dòng)之前彈出對話框(Dialog Box),要求使用者輸入密碼,經(jīng)確認(rèn)密碼正確后,允許使用者開始使用此一應(yīng)用程序,如果密碼輸入三次不正確,則會(huì)關(guān)閉應(yīng)用程序,即認(rèn)定使用者無使用此一應(yīng)用程序的權(quán)限,進(jìn)而保護(hù)使用者的私人軟件不受人為的外在侵害,該軟件保護(hù)的實(shí)施具體流程如‘圖4、圖5’所示,主要的運(yùn)作流程包括兩個(gè)階段(應(yīng)用程序的中斷階段)當(dāng)要啟動(dòng)某一應(yīng)用程序之時(shí),視窗操作系統(tǒng)將接收到一外部消息(步驟41)(例如使用者在視窗作業(yè)平臺(tái)中點(diǎn)選了某一應(yīng)用程序的執(zhí)行按鈕);再于此一應(yīng)用程序的進(jìn)程中注入一鉤接函數(shù)(Hook)(步驟42),設(shè)定一判斷裝置提供使用者進(jìn)行操作的選項(xiàng)(步驟43),(例如彈出一對話框詢問使用者是否要對此一應(yīng)用程序進(jìn)行保護(hù)),而使用者可以利用鼠標(biāo)、鍵盤或其他輸入設(shè)備來進(jìn)行確認(rèn),‘圖6’所揭示的即為一種圖形操作界面的例子,如果同意執(zhí)行保護(hù)程序所提供的擴(kuò)充功能,則調(diào)用鉤接函數(shù)所指向的動(dòng)態(tài)鏈接程序庫DLL(步驟44),而完成應(yīng)用程序的中斷處理(步驟45);(擴(kuò)充功能的執(zhí)行階段)應(yīng)用程序中斷成功后,讀入文件列表(filelist)(步驟51),檢查當(dāng)前的保護(hù)程序是否在應(yīng)用程序之進(jìn)程的文件列表中(步驟52),如果存在表示此一保護(hù)程序已被注入應(yīng)用程序中,接著通過檢驗(yàn)用戶輸入密碼是否正確(步驟53),其圖形操作界面例如‘圖7’所示,決定是否繼續(xù)執(zhí)行保護(hù)程序(步驟54),依據(jù)保護(hù)程序的執(zhí)行結(jié)果實(shí)現(xiàn)對應(yīng)用程序的保護(hù),但如果保護(hù)程序不在應(yīng)用程序之進(jìn)程的文件列表中,則表示鉤接函數(shù)并未注入此一應(yīng)用程序,亦即是應(yīng)用程序并未擴(kuò)充保護(hù)程序所提供的保護(hù)功能,故將控制權(quán)轉(zhuǎn)移給下一個(gè)鉤接函數(shù)(步驟55),依此類推,依序傳遞控制權(quán),再根據(jù)鉤接函數(shù)所指向之(DLL)的處理結(jié)果,以便決定是否將控制權(quán)交還應(yīng)用程序繼續(xù)執(zhí)行,使原應(yīng)用程序能夠繼續(xù)正確運(yùn)行原有的功能,或是結(jié)束應(yīng)用程序。
發(fā)明功效1.既不需要使用中斷例程(Interrupt Routine),也不需要修改應(yīng)用程序之原始程序,就可以實(shí)現(xiàn)擴(kuò)充應(yīng)用程序的軟件功能。
2.可以動(dòng)態(tài)地修正或更換應(yīng)用程序之軟件功能,并且具有即時(shí)性與跨平臺(tái)性(Cross Platform)。
附圖符號說明10……視窗操作系統(tǒng)11……外來的消息12……應(yīng)用程序回應(yīng)的消息13……鉤接函數(shù)14……功能擴(kuò)充界面15……功能擴(kuò)充程序
權(quán)利要求
1.一種計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,用以對在視窗操作系統(tǒng)之下執(zhí)行的應(yīng)用程序進(jìn)行功能的擴(kuò)充,包括有將至少一鉤接函數(shù)注入該應(yīng)用程序的進(jìn)程,該鉤接函數(shù)并且指向一功能擴(kuò)充模組;執(zhí)行相應(yīng)的該鉤接函數(shù),對該應(yīng)用程序進(jìn)行中斷;以及執(zhí)行該鉤接函數(shù)所指向的功能擴(kuò)充模組,并且依據(jù)該功能擴(kuò)充模組的執(zhí)行結(jié)果,決定將控制權(quán)交還該應(yīng)用程序繼續(xù)執(zhí)行,或是結(jié)束該應(yīng)用程序。
2.如權(quán)利要求1所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中該功能擴(kuò)充模組可為一動(dòng)態(tài)鏈接程序庫(DLL)。
3.如權(quán)利要求2所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中該功能擴(kuò)充模組至少包括有某一用途的功能擴(kuò)充程序。
4.如權(quán)利要求3所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中該功能擴(kuò)充程序可為一保護(hù)程序。
5.如權(quán)利要求3所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中該功能擴(kuò)充程序可為一進(jìn)程監(jiān)控程序。
6.如權(quán)利要求3所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中該功能擴(kuò)充程序可為一多媒體輔助程序。
7.如權(quán)利要求1所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中執(zhí)行該相應(yīng)之鉤接函數(shù)的步驟,是通過產(chǎn)生一圖形操作界面(GUI)提供使用者可選取的操作選項(xiàng),依據(jù)該選項(xiàng)的內(nèi)容執(zhí)行相應(yīng)之該鉤接函數(shù)。
8.如權(quán)利要求7所述計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中執(zhí)行該相應(yīng)之鉤接函數(shù)的步驟還包括有將該功能擴(kuò)充模組載入該應(yīng)用程序的地址空間。
全文摘要
本發(fā)明系為一種計(jì)算機(jī)軟件功能的動(dòng)態(tài)擴(kuò)充方法,其中披露了一種在計(jì)算機(jī)軟件(如:應(yīng)用程序,)執(zhí)行時(shí),動(dòng)態(tài)地修正或更換軟件功能的技術(shù);根據(jù)本發(fā)明所披露的技術(shù),是在應(yīng)用程序的進(jìn)程之中注入一鉤接函數(shù),通過將鉤接函數(shù)所呼叫的動(dòng)態(tài)鏈接程序庫載入進(jìn)程的步驟,提供一種既不需要使用中斷例程,也不需要修改應(yīng)用程序之原始程序碼,就可以實(shí)現(xiàn)擴(kuò)充應(yīng)用程序之軟件功能的方法。
文檔編號G06F9/318GK1310385SQ0010269
公開日2001年8月29日 申請日期2000年2月24日 優(yōu)先權(quán)日2000年2月24日
發(fā)明者陳玄同, 林光信, 李鵬 申請人:英業(yè)達(dá)股份有限公司