專利名稱:用于反安裝的監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于反安裝的監(jiān)控方法,特別涉及一種可以同時監(jiān)控多個安裝程序,且在監(jiān)控期間不受使用者其他操作影響的監(jiān)控方法。
一般來說,如果想要在電腦系統(tǒng)中使用某一軟件,需要先從磁盤或光盤中執(zhí)行一安裝程序(install.exe或setup.exe),以將軟件數(shù)據(jù)存入硬盤的相關(guān)目錄中,之后才能正常執(zhí)行該軟件,上述的動作過程稱為安裝(install或setup)。安裝一電腦軟件不只是將其文件數(shù)據(jù)復(fù)制到硬盤之中,同時會修改作業(yè)系統(tǒng)的相關(guān)環(huán)境設(shè)定;相反地,若要將軟件由電腦系統(tǒng)中除去,只將該軟件的所在目錄刪除是不夠的,還必須在作業(yè)系統(tǒng)(尤其是像Windows這種整合式環(huán)境)中移除某些設(shè)定才行,否則軟件會移除得不十分干凈。雖然沒有將軟件的相關(guān)環(huán)境設(shè)定移除干凈,一時之間也許不會使電腦出錯,但長久下來,由於電腦一直執(zhí)行許多不必要的設(shè)定內(nèi)容,因此會嚴重浪費系統(tǒng)資源并影響電腦運作效率,最後甚至?xí)沟秒娔X常掉機。
為避免上述的問題發(fā)生,以便讓使用者能夠?qū)⑺惭b的軟件完整從硬盤中移除,因此出現(xiàn)了一種解除安裝程序,或稱為反安裝(uninstall)程序。由於反安裝程序在執(zhí)行解除安裝的動作時,必須知道要移除哪些與該軟件相關(guān)的目錄與環(huán)境設(shè)定數(shù)據(jù),故在軟件安裝之前需先啟動該反安裝程序,讓反安裝程序能監(jiān)控并記錄其設(shè)定內(nèi)容。而目前的安裝監(jiān)控技術(shù)大都以“快照比較”為基礎(chǔ),也就是說反安裝程序會在軟件安裝之前,先將電腦系統(tǒng)內(nèi)相關(guān)的目錄路徑、登錄與可能被修改的設(shè)定內(nèi)容做一次的掃描與紀(jì)錄,之后在軟件安裝完成之后,再掃描與紀(jì)錄一次電腦系統(tǒng)的目錄路徑、登錄與設(shè)定內(nèi)容,兩相比較之下,反安裝程序便知道安裝該軟件所增加或改變的環(huán)境系統(tǒng)設(shè)定。
上述公知方法的特點是在同一時間中只能監(jiān)控一個安裝程序,并且要求使用者在監(jiān)控期間不能有任何的修改動作,否則會導(dǎo)致監(jiān)控記錄錯誤,造成安裝過程的失敗,如果安裝程序具有重啟動功能,則會使監(jiān)控過程中遺失記錄,因而不能獲得正確的監(jiān)控結(jié)果。
有監(jiān)于此,本發(fā)明的目的在于提供一種用于反安裝的監(jiān)控方法,設(shè)計一種可以同時監(jiān)控多個安裝軟件的反安裝程序,并且其監(jiān)控期間的紀(jì)錄也不受使用者的其他操作影響。
根據(jù)上述本發(fā)明的目的,本發(fā)明提供的一種用于反安裝的監(jiān)控方法應(yīng)用于監(jiān)控至少一安裝程序的安裝過程,以作為反安裝(Uninstall)時移除數(shù)據(jù)的依據(jù),將原本在Ring0層訪問權(quán)限的文件紀(jì)錄(File Record)與登錄記錄(Registry Record),轉(zhuǎn)換為在Ring3層訪問權(quán)限也可操作調(diào)用的一新文件紀(jì)錄與一新登錄記錄,然后利用任務(wù)監(jiān)控模塊監(jiān)測執(zhí)行中的進程是否有安裝程序,一但發(fā)現(xiàn)有安裝程序在電腦系統(tǒng)中啟動,則通知文件紀(jì)錄模塊與登錄紀(jì)錄模塊,分別對文件系統(tǒng)數(shù)據(jù)與登錄數(shù)據(jù)的更改前后內(nèi)容進行備份與紀(jì)錄,最后通過重啟保護模塊攔截系統(tǒng)啟動程序,以避免電腦重新啟動而造成安裝紀(jì)錄數(shù)據(jù)的遺失。其具體步驟包括攔截一執(zhí)行中軟件的進程識別碼(Process ID),并確認該軟件為該安裝程序;將位於中央處理單元(CPU)的Ring0層訪問權(quán)限的一文件紀(jì)錄(File Record)與一登錄記錄(Registry Record),轉(zhuǎn)換為在Ring3層訪問權(quán)限也可操作調(diào)用的一新文件紀(jì)錄與一新登錄記錄;監(jiān)測該安裝程序?qū)υ撔挛募o(jì)錄與一文件系統(tǒng)的輸入/輸出(I/O)操作,并且對該新文件紀(jì)錄與該文件系統(tǒng)的內(nèi)容備份;監(jiān)測該安裝程序?qū)υ撔碌卿浻涗浀妮斎?輸出(I/O)操作,并且對該新登錄記錄的內(nèi)容備份;以及利用該安裝程序中之一跳轉(zhuǎn)(Jump)命令而攔截電腦的系統(tǒng)啟動函數(shù)。
由于本發(fā)明讓每一個安裝程序?qū)?yīng)一個Ring3層的文件紀(jì)錄與登錄記錄,因此可以讓多個安裝程序同時進行安裝程序而不會將安裝紀(jì)錄弄錯。
為讓本發(fā)明的上述和其他目的、特征、和優(yōu)點能更明顯易懂,下文特舉一優(yōu)選實施例,并配合附圖作詳細說明如下。
圖1A顯示本發(fā)明的功能模塊示意圖;圖1B顯示本發(fā)明將紀(jì)錄由Ring0層訪問權(quán)限轉(zhuǎn)換為Ring3層訪問權(quán)限的示意圖;圖2顯示本發(fā)明中任務(wù)監(jiān)控的流程圖;圖3顯示本發(fā)明中文件紀(jì)錄的流程圖;圖4顯示本發(fā)明中登錄記錄操作的流程圖;圖5顯示本發(fā)明中重啟保護的流程圖;以及圖6顯示本發(fā)明中由Ring0層到Ring3層的數(shù)據(jù)轉(zhuǎn)換流程圖。
附圖符號說明100.................Ring0層101.................文件紀(jì)錄102.................登錄紀(jì)錄110.................Ring3層111.................文件紀(jì)錄112.................登錄紀(jì)錄120.................Ring0層到Ring3層數(shù)據(jù)轉(zhuǎn)換模塊130.................任務(wù)監(jiān)控模塊140.................文件紀(jì)錄模塊150.................登錄紀(jì)錄模塊160.................重啟保護模塊請參照圖1A,圖中顯示本發(fā)明的安裝監(jiān)控功能由四個部份所支持,即任務(wù)監(jiān)控模塊130、文件記錄模塊140、登錄記錄模塊150和重啟保護模塊160;除此之外,請參照圖1B,本發(fā)明也須另外將Ring0層的文件記錄(File Record)和登錄記錄(Registry Record),利用一數(shù)據(jù)轉(zhuǎn)換模塊120轉(zhuǎn)換成Ring3層的文件記錄和登錄記錄,之后,再由上述四個功能模塊任務(wù)監(jiān)控模塊130、文件記錄模塊140、登錄記錄模塊150和重啟保護模塊160來共同完成安裝監(jiān)控的功能。
至于上述四個功能模塊的各自操作流程詳述如下任務(wù)監(jiān)控模塊130請參照圖2,該模塊130通過對Win32API的攔截,來完成對系統(tǒng)任務(wù)(Task)的監(jiān)控,首先調(diào)用與被處理進程相關(guān)的創(chuàng)建進程函數(shù)(CreateProcess)(步驟201),然后讀取當(dāng)前進程的識別碼(Process ID)(步驟202),并且從原函數(shù)反饋值中取出被創(chuàng)建進程的識別碼,同時將這個識別碼ID發(fā)送給主控程序(步驟203),由主控程序判斷該進程是否為安裝程序進程(步驟204),如果是,則通知主控程序為該任務(wù)建立一個新的記錄(步驟205),如果否,則返回,繼續(xù)等待下次調(diào)用(步驟206)。
文件記錄模塊140請參照圖3,首先調(diào)用攔截函數(shù),以攔截文件系統(tǒng)的I/O操作(步驟301),然后判斷目前正在執(zhí)行的程序是否被監(jiān)控(步驟302)?如果是,則判斷當(dāng)前的操作是否為開啟文件(Open File)操作(步驟303),如果也是,則分析其存取(Access)操作權(quán)限(步驟309),同時判斷其是否為破壞性操作(步驟310),如果又是,則備份該文件內(nèi)容(步驟306),程序返回;如果不是,則直接結(jié)束程序。若之前判斷目前操作不是開啟文件操作,則繼續(xù)判斷當(dāng)前操作是否為刪除(Delete)操作(步驟304),如果是,則備份文件內(nèi)容(步驟308);如果不是,則進一步判斷當(dāng)前操作是否為重命名(Rename)操作(步驟305),如果是,備份該文件內(nèi)容(步驟306),如果仍然不是,則視為當(dāng)前操作無效,程序返回,等待下一次操作(步驟307);登錄記錄模塊150請參照圖4,本發(fā)明通過對登錄(Registry)的輸入/輸出(I/O)監(jiān)測,以記錄安裝程序?qū)ζ渌龅男薷?。首先調(diào)用攔截函數(shù),置換Ring0層與Ring3層的登錄地址(步驟401),然后攔截輸入/輸出(I/O)操作(步驟402),判斷當(dāng)前操作是否有修改登錄(步驟403),如果是,則記錄所作的修改操作結(jié)果(步驟404),并記錄下原始數(shù)據(jù)(步驟405);如果當(dāng)前登錄未修改,則程序返回(步驟406),等待攔截下一登錄。
重啟保護160請參照圖5,該模塊可以防止安裝過程中,由於安裝程序重新啟動電腦所造成的安裝紀(jì)錄數(shù)據(jù)損失。首先尋找安裝程序原函數(shù)地址(步驟501),讀取其下的跳轉(zhuǎn)(JUMP)命令(步驟502),并將該跳轉(zhuǎn)命令中的跳轉(zhuǎn)地址指向攔截函數(shù)(步驟503),然後攔截系統(tǒng)啟動函數(shù)(步驟504),等待被外層的安裝程序調(diào)用(步驟505);若接收到調(diào)用操作(步驟506),則判斷此時運行的程序是否被監(jiān)控(步驟507),如果是,則不影響此時的函數(shù)調(diào)用(步驟509),程序返回;如果不是,則重啟電腦(步驟508)。
另外,Ring0層到Ring3層的數(shù)據(jù)轉(zhuǎn)換模塊120,請參照圖6,通過該模塊可以完成從Ring0層到Ring3層的數(shù)據(jù)轉(zhuǎn)換,以使得Ring0層的文件記錄和登錄記錄數(shù)據(jù)可以被Ring3層操作調(diào)用。首先初始化函數(shù)(步驟601),讀取第一個Ring3層進程(Process)(步驟602),將其轉(zhuǎn)換為TDB地址(步驟603),然後讀取Ring0層ID識別碼(步驟604),判斷是否與之相等(步驟605),如果是,則返回該ID(步驟606);如果否,則取下一ID(步驟607),判斷這個ID是否存在(步驟608),如果存在,則繼續(xù)將其轉(zhuǎn)換成TDB地址,重復(fù)轉(zhuǎn)換為TDB地址(步驟603)到返回(步驟609)的操作;如果不存在,則程序返回,表明操作已空(步驟609)。
下面特以WinZip軟件的安裝過程為例,說明本發(fā)明的安裝監(jiān)控過程首先啟動安裝程序,此時,本發(fā)明所提供的任務(wù)監(jiān)控模塊被調(diào)用,攔截到當(dāng)前的進程識別碼(Process ID),提示主控程序發(fā)現(xiàn)當(dāng)前所運行的進程是安裝程序,詢問是否記錄,確認后,開始為當(dāng)前任務(wù)建立新記錄,接下來啟動文件系統(tǒng)監(jiān)控和登錄監(jiān)控程序,分別攔截文件系統(tǒng)和登錄的輸入/輸出(I/O)操作,針對其不同情況進行備份處理,對應(yīng)地將Ring0層文件記錄和登錄記錄轉(zhuǎn)換成Ring3層文件記錄和登錄記錄,啟動重啟保護,跟蹤進程變化,記錄由此任務(wù)所產(chǎn)生的對文件系統(tǒng)和登錄的改變,備份被修改的原始文件,安裝完成后,顯示所作的記錄,供使用者參考。
由于本發(fā)明將原本在Ring0層進行的文件紀(jì)錄與登錄記錄的修改動作,轉(zhuǎn)換為在Ring3層執(zhí)行,并且每一安裝程序?qū)?yīng)一組Ring3層的文件紀(jì)錄與登錄記錄,因此可同時監(jiān)控多個安裝程序,且在監(jiān)控過程中不影響使用者的其他操作。
再者,本發(fā)明能夠自動監(jiān)測使用者的重啟請求,當(dāng)使用者重啟安裝程序時,不會造成安裝記錄的錯誤或遺失,同時亦支持DOS操作和16位Windows程序操作。
雖然通過參考本發(fā)明的一優(yōu)選實施例已經(jīng)對本發(fā)明作了圖示和描述,然其并非用于限定本發(fā)明。本領(lǐng)域普通技術(shù)人員應(yīng)該明白,可以對其作各種更動和修改而不偏離后附權(quán)利要求書所限定的精神和范圍。因此本發(fā)明的保護范圍應(yīng)以后附的權(quán)利要求書所限定的范圍為準(zhǔn)。
權(quán)利要求
1.一種用于反安裝的監(jiān)控方法,應(yīng)用于監(jiān)控至少一安裝程序的安裝過程,以作為反安裝(Uninstall)時移除數(shù)據(jù)的依據(jù),其包括攔截一執(zhí)行中軟件的進程識別碼(Process ID),并確認該軟件為該安裝程序;將位于中央處理單元(CPU)的Ring0層訪問權(quán)限的一文件紀(jì)錄(FileRecord)與一登錄記錄(Registry Record),轉(zhuǎn)換為在Ring3層訪問權(quán)限也可操作調(diào)用的一新文件紀(jì)錄與一新登錄記錄;監(jiān)測該安裝程序?qū)υ撔挛募o(jì)錄與一文件系統(tǒng)的輸入/輸出(I/O)操作,并且對該新文件紀(jì)錄與該文件系統(tǒng)的內(nèi)容備份;監(jiān)測該安裝程序?qū)υ撔碌卿浻涗浀妮斎?輸出(I/O)操作,并且對該新登錄記錄的內(nèi)容備份;以及利用該安裝程序中之一跳轉(zhuǎn)(Jump)命令而攔截電腦的系統(tǒng)啟動函數(shù)。
2.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中透過攔截應(yīng)用程序界面(Application Program Interface,API),來達到對該安裝程序的任務(wù)監(jiān)控。
3.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中該進程識別碼(Process ID)由與該軟件相關(guān)的創(chuàng)建進程(Create Process)函數(shù)中取得。
4.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中該文件系統(tǒng)包括相關(guān)目錄結(jié)構(gòu)、文件名稱、文件數(shù)量以及文件內(nèi)容。
5.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中監(jiān)測該安裝程序?qū)υ撔挛募o(jì)錄與該文件系統(tǒng)的輸入/輸出(I/O)操作,還包含下列步驟攔截該新文件紀(jì)錄與該文件系統(tǒng)的輸入/輸出(I/O)操作;以及判斷對該新文件紀(jì)錄與該文件系統(tǒng)進行存取的程序是否被監(jiān)控。
6.如權(quán)利要求5所述的用于反安裝的監(jiān)控方法,其中該輸入/輸出(I/O)操作包括開啟文件(Open File)操作、刪除文件(Delete File)操作與重命名(Rename)操作組合的其中之一。
7.如權(quán)利要求6所述的用于反安裝的監(jiān)控方法,其中若該輸入/輸出(I/O)操作為該開啟文件(Open File)操作,則還增加一分析該操作的存取權(quán)限是否為一破壞性操作的步驟。
8.如權(quán)利要求7所述的用于反安裝的監(jiān)控方法,其中該破壞性操作指對該開啟文件內(nèi)容做任何更動的操作。
9.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中監(jiān)測該安裝程序?qū)υ撔碌卿浻涗浀妮斎?輸出(I/O)操作,還包含下列步驟置換該登錄紀(jì)錄與該新登錄紀(jì)錄的地址;攔截該新登錄紀(jì)錄的輸入/輸出(I/O)操作;以及判斷該輸入/輸出(I/O)操作是否修改該新登錄紀(jì)錄。
10.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中對該新登錄記錄的內(nèi)容備份包括存儲該新登錄記錄的原始數(shù)據(jù);以及存儲該輸入/輸出(I/O)操作的內(nèi)容。
11.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中攔截電腦的系統(tǒng)啟動函數(shù),還包含下列步驟讀取該安裝程序下的該跳轉(zhuǎn)(Jump)命令;以及將該跳轉(zhuǎn)(Jump)命令中的跳轉(zhuǎn)地址轉(zhuǎn)換為一攔截函數(shù)的地址。
12.如權(quán)利要求1所述的用于反安裝的監(jiān)控方法,其中將數(shù)據(jù)由Ring0層訪問權(quán)限轉(zhuǎn)換為Ring3層訪問權(quán)限,還包含下列步驟讀取一Ring3層的進程(Process),并將其轉(zhuǎn)換為TDB地址;以及讀取該進程的相對Ring0層的識別碼(ID),并判斷是否與該進程的識別碼相同。
全文摘要
一種用于反安裝的監(jiān)控方法,將位于Ring0層的文件記錄與登錄記錄轉(zhuǎn)換為Ring3層也可操作調(diào)用,再通過任務(wù)監(jiān)控、文件紀(jì)錄、登錄記錄以及重啟保護四個部分的支持,而執(zhí)行檢測、監(jiān)控安裝程序以及記錄其所更改的文件與設(shè)定內(nèi)容,同時由于重啟保護部分會攔截系統(tǒng)啟動函數(shù),因此可以保護在安裝過程所記錄的數(shù)據(jù)不會遺失,又由于每一安裝程序皆可對應(yīng)一Ring3層文件紀(jì)錄與登錄記錄,使得本發(fā)明可以同時監(jiān)控多個安裝程序,而不會有將安裝記錄弄錯的問題。
文檔編號G06F11/30GK1368679SQ0110334
公開日2002年9月11日 申請日期2001年2月1日 優(yōu)先權(quán)日2001年2月1日
發(fā)明者陳玄同, 林光信 申請人:英業(yè)達股份有限公司