亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法

文檔序號:6440237閱讀:1448來源:國知局
專利名稱:Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及虛擬化技術(shù),尤其涉及一種Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法。
背景技術(shù)
瘦客戶端技術(shù)是將應(yīng)用程序運(yùn)行在后端服務(wù)器上,并通過網(wǎng)絡(luò)將其顯示信息輸出到遠(yuǎn)端客戶機(jī)上,同時接受遠(yuǎn)端客戶機(jī)發(fā)送的輸入請求,從而達(dá)到資源集中管理、維護(hù)成本降低、服務(wù)質(zhì)量提高等目標(biāo)。隨著云計(jì)算的發(fā)展,軟件即服務(wù)(Software as a Service)允許用戶通過遠(yuǎn)程客戶端訪問操作運(yùn)行在服務(wù)器上的應(yīng)用程序。從中可發(fā)現(xiàn),人們更關(guān)注應(yīng)用程序提供的服務(wù),而不是該應(yīng)用程序運(yùn)行在什么操作系統(tǒng)上、該應(yīng)用程序在哪里運(yùn)行、操作系統(tǒng)如何支持其運(yùn)行等。應(yīng)用程序虛擬化技術(shù)是將應(yīng)用程序從底層操作系統(tǒng)中隔離出來,并且與其他應(yīng)用程序隔離開來,從而降低應(yīng)用程序與操作系統(tǒng)之間的耦合度,降低應(yīng)用程序之間的干擾的技術(shù)。通過應(yīng)用程序虛擬化技術(shù),可以在同一操作系統(tǒng)中獨(dú)立地運(yùn)行多個應(yīng)用程序。目前,為應(yīng)用程序建立虛擬執(zhí)行環(huán)境的方法主要包括以下幾種(1)采用虛擬機(jī)技術(shù)為應(yīng)用程序建立虛擬執(zhí)行環(huán)境虛擬機(jī)技術(shù)是在軟、硬件之間引入虛擬層,可以為應(yīng)用程序提供獨(dú)立的運(yùn)行環(huán)境, 屏蔽硬件平臺的動態(tài)性、分布性和異構(gòu)性,支持硬件資源的共享和復(fù)用,并為每個用戶提供屬于個人獨(dú)立、隔離的計(jì)算環(huán)境,同時,為管理員提供硬件資源和軟件資源的集中管理。虛擬機(jī)技術(shù)使得在同一臺計(jì)算機(jī)資源上可以同時運(yùn)行多個操作系統(tǒng)。多個用戶可通過網(wǎng)絡(luò)登錄到相應(yīng)操作系統(tǒng)中,運(yùn)行獨(dú)立的應(yīng)用程序。從而,虛擬機(jī)為應(yīng)用程序的運(yùn)行提供了相互隔離的運(yùn)行環(huán)境。(2)通過文件系統(tǒng)隔離技術(shù)為應(yīng)用程序建立虛擬執(zhí)行環(huán)境杰路(Jails)通過在原操作系統(tǒng)中劃分出執(zhí)行環(huán)境Jail,為程序運(yùn)行提供了 Unix 系統(tǒng)的“根”目錄模式,限制應(yīng)用程序僅可訪問Jail里的資源。每一個Jail被綁定一個IP 地址。Jail中的進(jìn)程無法與Jail外的進(jìn)程通信交互。該系統(tǒng)在FreeBSD的內(nèi)核中實(shí)現(xiàn)原型,可視為一個輕量級虛擬機(jī)。安全運(yùn)行環(huán)境(SEE)采用直接隔離(One-Way Isolation)機(jī)制實(shí)現(xiàn)了一個安全的執(zhí)行環(huán)境。SEE通過實(shí)現(xiàn)一個隔離文件系統(tǒng),使得執(zhí)行環(huán)境中運(yùn)行的應(yīng)用程序?qū)ξ募到y(tǒng)的操作限制在隔離出的文件系統(tǒng)中。在SEE中運(yùn)行的應(yīng)用程序可以讀取操作系統(tǒng)中的資源, 但任何修改操作限制在SEE內(nèi)。SEE通過維護(hù)一張修改文件映射表,方便用戶查看在SEE中所做的修改。SEE可對在其內(nèi)所做的修改進(jìn)行回滾、提交操作。SEE系統(tǒng)在Linux系統(tǒng)中實(shí)現(xiàn)。同樣,康施(Consh)提供遠(yuǎn)程資源和本地資源的透明訪問,為網(wǎng)絡(luò)計(jì)算處理建立了一個受限的執(zhí)行環(huán)境,其實(shí)現(xiàn)在Linux系統(tǒng)的用戶層中。另一種執(zhí)行環(huán)境阿爾卡 (Alcatraz)是通過截獲應(yīng)用程序修改文件的操作、重定向文件的位置和為程序維護(hù)文件修改視圖,使得程序?qū)ο到y(tǒng)的修改控制在一個緩存目錄中,將不可信程序執(zhí)行后的效果與原系統(tǒng)隔離,其實(shí)現(xiàn)在Linux系統(tǒng)上,在虛擬文件系統(tǒng)VFS (Virtual File System)層截獲文件操作。先進(jìn)部署系統(tǒng)PDS Progressive Deployment System)是一個為方便應(yīng)用程序的部署而設(shè)計(jì)的虛擬執(zhí)行環(huán)境,通過截獲應(yīng)用程序運(yùn)行過程中有關(guān)文件操作和注冊表操作的系統(tǒng)調(diào)用來實(shí)現(xiàn)應(yīng)用程序運(yùn)行過程中的軟件資源的按需下載。(3)通過配置文件的方式為應(yīng)用程序建立虛擬執(zhí)行環(huán)境守護(hù)神(Janus)通過監(jiān)視和限制輔助程序的系統(tǒng)調(diào)用,將輔助程序運(yùn)行在一個相對安全的執(zhí)行環(huán)境中。其是依照下列假設(shè),即如果適當(dāng)?shù)叵拗埔粋€應(yīng)用程序?qū)Φ讓硬僮飨到y(tǒng)資源的訪問,那么這個應(yīng)用程序?qū)ο到y(tǒng)的危害會很小。由于各個應(yīng)用程序需求不同,設(shè)計(jì)一個適用于通常所用應(yīng)用程序的限制機(jī)制是一件挑戰(zhàn)的事??膳渲煤邢銶APBox不僅提供了 Janus等所具有的隔離功能,并且是可配置的。MAPBox通過應(yīng)用程序的功能以及為完成該功能所需要的資源將應(yīng)用程序歸類,然后根據(jù)應(yīng)用程序的類別屬性來構(gòu)建初始化相應(yīng)類別的沙箱。這有點(diǎn)類似多用途電子郵件擴(kuò)展類型(MIME-types),用來標(biāo)記數(shù)據(jù)文件的格式。其實(shí)現(xiàn)在Linux系統(tǒng)上。系統(tǒng)調(diào)用跟蹤(Systrace)通過分析應(yīng)用程序運(yùn)行過程中訪問的系統(tǒng)調(diào)用產(chǎn)生相應(yīng)的系統(tǒng)調(diào)用策略,并根據(jù)該策略限制應(yīng)用程序的運(yùn)行。Systrace中的應(yīng)用程序不需要運(yùn)行在特權(quán)態(tài),并且可根據(jù)策略自動提升權(quán)限。Systrace將策略的產(chǎn)生分為兩個階段,即訓(xùn)練階段和用戶使用階段。在訓(xùn)練階段,記錄程序運(yùn)行過程中的系統(tǒng)調(diào)用信息。程序執(zhí)行完后, 運(yùn)用工具分析該記錄信息,自動產(chǎn)生系統(tǒng)調(diào)用策略。在用戶使用階段,針對不確定的策略, 與用戶交互,根據(jù)用戶的選擇確定相應(yīng)的系統(tǒng)調(diào)用策略。其實(shí)現(xiàn)在Linux系統(tǒng)上。(4)通過應(yīng)用程序隔離技術(shù)建立虛擬執(zhí)行環(huán)境豆-豆莢(Pea-Pod)提供一種不可信遺留程序的隔離和遷移機(jī)制。Pea中的特權(quán)程序被限制在小部分系統(tǒng)資源中運(yùn)行,從而可預(yù)防特權(quán)程序的入侵。Pod將一組程序和用戶隔離在一個虛擬環(huán)境中。Pod提供一種從檢查點(diǎn)重啟機(jī)制,方便程序的遷移。Pod隔離那些通過文件系統(tǒng)或互聯(lián)網(wǎng)進(jìn)行通信的應(yīng)用程序組件。Pea隔離那些通過進(jìn)程間通信機(jī)制進(jìn)行交互的應(yīng)用組件。其實(shí)現(xiàn)在Linux系統(tǒng)上。羽量虛擬機(jī)FVM(Feather-weight Virtual Machine)提供了這樣一種機(jī)制,即實(shí)際又隔離。FVM是為Windows程序構(gòu)造的一個操作系統(tǒng)級的輕量級虛擬機(jī)。FVM是通過命名空間虛擬化和COWkopy-onirite)模式實(shí)現(xiàn)了虛擬機(jī)間的資源的相互隔離并能充分共享操作系統(tǒng)資源。其可以實(shí)現(xiàn)通信的隔離。FVM主要包括以下部分文件虛擬化、注冊表虛擬化、系統(tǒng)對象虛擬化、網(wǎng)絡(luò)接口虛擬化、進(jìn)程間通信限制和后臺服務(wù)虛擬化。FVM實(shí)現(xiàn)在 Windows系統(tǒng)的內(nèi)核層,其虛擬化操作將會影響該操作系統(tǒng)中運(yùn)行的所有應(yīng)用程序,對系統(tǒng)影響較大。由上述分析可知,為應(yīng)用程序建立虛擬執(zhí)行環(huán)境是軟件即服務(wù)架構(gòu)中的關(guān)鍵,即從操作系統(tǒng)中隔離出執(zhí)行環(huán)境,并實(shí)現(xiàn)執(zhí)行環(huán)境之間的隔離。目前,虛擬執(zhí)行環(huán)境的實(shí)現(xiàn)方法中存在如下缺陷上述幾種虛擬執(zhí)行環(huán)境的實(shí)現(xiàn)方法要求首先將應(yīng)用程序安裝在原操作系統(tǒng)中,并且應(yīng)用程序的配置信息和運(yùn)行文件存放在操作系統(tǒng)中,使得應(yīng)用程序與操作系統(tǒng)的耦合度較高,不便于按需加載應(yīng)用程序和保存用戶在使用應(yīng)用程序過程中產(chǎn)生的個性化定制數(shù)據(jù)和私有文件數(shù)據(jù)。

發(fā)明內(nèi)容
本發(fā)明提供一種Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,用以降低應(yīng)用程序與操作系統(tǒng)的耦合度。本發(fā)明提供一種Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,包括根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用,使用在所述應(yīng)用程序執(zhí)行時注入的動態(tài)鏈接庫中的系統(tǒng)調(diào)用,重寫所截獲的第一系統(tǒng)調(diào)用,并使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表, 以使所述應(yīng)用程序根據(jù)所述虛擬注冊表對所述私有注冊表和所述系統(tǒng)注冊表進(jìn)行訪問;根據(jù)所述配置文件,截獲所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用,根據(jù)所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù),獲取文件所屬的空間,并根據(jù)所述配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)所述路徑信息對所述文件進(jìn)行操作。本發(fā)明提供的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,通過構(gòu)建虛擬注冊表,將應(yīng)用程序運(yùn)行過程中所依賴的配置信息存放在私有注冊表中,與操作系統(tǒng)的系統(tǒng)注冊表獨(dú)立開;通過對文件操作進(jìn)行虛擬化,建立獨(dú)立于系統(tǒng)空間的用戶空間、軟件空間,從而將用戶在使用應(yīng)用程序過程中產(chǎn)生的個性化定制數(shù)據(jù)和私有數(shù)據(jù)保存在獨(dú)立于系統(tǒng)空間的空間中,同時整合應(yīng)用程序?qū)τ脩糍Y源、軟件資源和系統(tǒng)資源的訪問,達(dá)到了降低應(yīng)用程序與操作系統(tǒng)的耦合度的目的。


圖1為本發(fā)明一實(shí)施例提供的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法的流程圖;圖2A為本實(shí)施例的虛擬注冊表的功能架構(gòu)圖;圖2B為本發(fā)明一實(shí)施例提供的文件訪問虛擬化實(shí)現(xiàn)過程的流程圖;圖2C為本發(fā)明一實(shí)施例提供的雙向鏈表的結(jié)構(gòu)示意圖;圖3為本發(fā)明另一實(shí)施例提供的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法的流程圖。
具體實(shí)施例方式圖1為本發(fā)明一實(shí)施例提供的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法的流程圖。如圖1所示,本實(shí)施例的方法包括步驟101、根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用,使用在所述應(yīng)用程序執(zhí)行時注入的動態(tài)鏈接庫中的系統(tǒng)調(diào)用,重寫所截獲的第一系統(tǒng)調(diào)用,并使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表,以使所述應(yīng)用程序根據(jù)所述虛擬注冊表對所述私有注冊表和所述系統(tǒng)注冊表進(jìn)行訪問。其中,降低應(yīng)用程序與操作系統(tǒng)的耦合度,也就是將應(yīng)用程序運(yùn)行過程中所依賴的配置信息和運(yùn)行文件存放在獨(dú)立空間中,并將用戶在使用應(yīng)用程序過程中產(chǎn)生的個性化定制數(shù)據(jù)和私有文件數(shù)據(jù)保存在獨(dú)立空間中,同時整合應(yīng)用程序?qū)τ脩糍Y源、軟件資源和系統(tǒng)資源的訪問。為實(shí)現(xiàn)上述目的,本實(shí)施例預(yù)先建立了私有注冊表,用于存儲應(yīng)用程序運(yùn)行過程中所依賴的配置信息等?;诖耍静襟E101采用虛擬注冊表的方式,即通過重寫系統(tǒng)調(diào)用實(shí)現(xiàn)將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表,以使應(yīng)用程序在運(yùn)行過程中能夠根據(jù)虛擬注冊表實(shí)現(xiàn)對私有注冊表和系統(tǒng)注冊表的相應(yīng)訪問。為了實(shí)現(xiàn)私有注冊表與系統(tǒng)注冊表的融合,應(yīng)用程序在執(zhí)行時,會向動態(tài)鏈接庫 (DLL)中注入一系統(tǒng)調(diào)用,該系統(tǒng)調(diào)用用于實(shí)現(xiàn)對與系統(tǒng)注冊表有關(guān)的系統(tǒng)調(diào)用的重寫,以便于將私有注冊表與系統(tǒng)注冊表進(jìn)行融合,使得應(yīng)用程序可以訪問私有注冊表獲取所需配直fe息。在實(shí)際實(shí)現(xiàn)過程中,首先根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的系統(tǒng)調(diào)用,即第一系統(tǒng)調(diào)用。然后,使用在應(yīng)用程序執(zhí)行時注入動態(tài)鏈接庫中的系統(tǒng)調(diào)用重寫所截獲的第一系統(tǒng)調(diào)用,使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表。這樣,應(yīng)用程序在運(yùn)行過程中就可以根據(jù)虛擬注冊表對私有注冊表和系統(tǒng)注冊表進(jìn)行訪問,而不再僅對系統(tǒng)注冊表進(jìn)行訪問,從而可以從私有注冊表中獲取所需配置信息,在一定程度上實(shí)現(xiàn)了與操作系統(tǒng)的隔離。其中,所述重寫可以是用動態(tài)鏈接庫中的系統(tǒng)調(diào)用替換第一系統(tǒng)調(diào)用,還可以是使用動態(tài)鏈接庫中的系統(tǒng)調(diào)用對第一系統(tǒng)調(diào)用的參數(shù)進(jìn)行修改,使得修改后的第一系統(tǒng)調(diào)用能夠?qū)⑾到y(tǒng)注冊表與私有注冊表融合在一起。在本步驟中,所攔截的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用主要是指對注冊表進(jìn)行讀取、創(chuàng)建、修改或刪除操作緊密相關(guān)的系統(tǒng)調(diào)用。其中,每個第一系統(tǒng)調(diào)用包括Unicode 版本和ASCII版本。步驟101實(shí)現(xiàn)了虛擬注冊表。步驟102、根據(jù)所述配置文件,截獲所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用,根據(jù)所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù),獲取文件所屬的空間,并根據(jù)所述配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)所述路徑信息對所述文件進(jìn)行操作。為了實(shí)現(xiàn)降低應(yīng)用程序與操作系統(tǒng)的耦合度的目的,還需要將運(yùn)行文件、使用應(yīng)用程序所產(chǎn)生的個性化定制數(shù)據(jù)和私有文件數(shù)據(jù)保存在獨(dú)立空間,并且還要整合應(yīng)用程序?qū)τ脩糍Y源、軟件資源和系統(tǒng)資源的訪問,為了實(shí)現(xiàn)該目的,本實(shí)施例預(yù)先建立獨(dú)立于系統(tǒng)空間的軟件空間和用戶空間。其中,軟件空間用于存儲與軟件相關(guān)的數(shù)據(jù),例如運(yùn)行文件等。用戶空間用于存儲與用戶有關(guān)的數(shù)據(jù),例如用戶使用應(yīng)用程序所產(chǎn)生的個性化定制數(shù)據(jù)、私有文件數(shù)據(jù)等。其中,系統(tǒng)空間、軟件空間和用戶空間彼此之間存在路徑映射關(guān)系,也就是說可以根據(jù)其中一個空間找到另外兩個空間。其中,系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系預(yù)先存儲在配置文件中。在系統(tǒng)空間、軟件空間和用戶空間共同存在的基礎(chǔ)上,通過截獲與文件操作相關(guān)的系統(tǒng)調(diào)用,即第二系統(tǒng)調(diào)用,并根據(jù)系統(tǒng)調(diào)用的路徑參數(shù),獲取所要操作的文件所屬的空間,然后根據(jù)預(yù)先存儲在配置文件中的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作文件的操作類型相適應(yīng)的路徑信息,然后根據(jù)返回的路徑信息到相應(yīng)的空間中去對文件進(jìn)行操作,即執(zhí)行系統(tǒng)調(diào)用。步驟102實(shí)現(xiàn)了文件訪問虛擬化。
10
虛擬注冊表和文件訪問虛擬化實(shí)現(xiàn)了從操作系統(tǒng)中隔離出應(yīng)用程序的虛擬執(zhí)行環(huán)境,降低了應(yīng)用程序與操作系統(tǒng)的耦合度。本實(shí)施例通過構(gòu)建虛擬注冊表,將應(yīng)用程序運(yùn)行過程中所依賴的配置信息存放在私有注冊表中,與操作系統(tǒng)的系統(tǒng)注冊表獨(dú)立開,通過對文件操作進(jìn)行虛擬化,建立獨(dú)立于系統(tǒng)空間的用戶空間、軟件空間,從而將用戶在使用應(yīng)用程序過程中產(chǎn)生的個性化定制數(shù)據(jù)和私有數(shù)據(jù)保存在獨(dú)立于系統(tǒng)空間的空間中,同時整合應(yīng)用程序?qū)τ脩糍Y源、軟件資源和系統(tǒng)資源的訪問,達(dá)到了降低應(yīng)用程序與操作系統(tǒng)的耦合度的目的。下面將詳細(xì)說明通過重寫后的系統(tǒng)調(diào)用如何將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表,從而使應(yīng)用程序通過虛擬注冊表對私有注冊表和系統(tǒng)注冊表的訪問。圖2A為本實(shí)施例的虛擬注冊表的功能架構(gòu)圖。如圖2A所示,該功能架構(gòu)主要包括私有注冊表讀寫層(VRIOLayer)、私有注冊表操作層(VROPLayer)、注冊表融合層(Virtual Registry)系統(tǒng)注冊表(Original Windows APIs)和私有注冊表(Private Registry)。其中,私有注冊表讀寫層(VRIOLayer):維護(hù)私有注冊表內(nèi)容。該私有注冊表讀寫層主要包括以下操作接口 創(chuàng)建鍵(CreateKey)、設(shè)置值(SetValue)^iJ 建值(CreateValue)、查詢記錄(QueryRecord)、刪除(Delete)、獲取下一個節(jié)點(diǎn) (GetNextNode)、獲取下一個鍵(GetNextKey)、獲取版本號(GetVersion)等,這些接口用來輔助私有注冊表讀寫層完成對私有注冊表內(nèi)容的增加、刪除、修改和查找等操作。其中GetVersion用來讀取私有注冊表的版本(Version)號。私有注冊表每做一次改變,其 Version號就增1。該Version號被應(yīng)用程序創(chuàng)建的多個進(jìn)程所共享,用來在多個進(jìn)程間維護(hù)私有注冊表的一致性。私有注冊表操作層(VROPLayer):維護(hù)內(nèi)存中的私有注冊表。私有注冊表操作層主要包括以下操作接口 創(chuàng)建鍵(CreateKeyExW)、刪除鍵(DeleteKeyW)、刪除值 (DeleteValueff)、枚舉鍵(EnumKeyExW)、枚舉值(EnumValueW)、打開鍵(OpenKeyExW)、查詢鍵信息(QueryInfoKeyff)、查詢值信息(QueryValueExff)、設(shè)定值(SetValueExff)、讀取鍵的安全信息(GetKeykcurity)、設(shè)定鍵的安全信息(ktKeykcurity)、讀取版本號 (GetVersion)等,這些操作接口用來輔助私有注冊表操作層完成與私有注冊表相關(guān)的增加、刪除、修改、查找的操作。例如,該私有注冊表操作層需要將鍵中數(shù)據(jù)項(xiàng)值從內(nèi)存二進(jìn)制值形式轉(zhuǎn)化為相應(yīng)的數(shù)據(jù)存儲格式(例如FF,00,F(xiàn)F,00),并傳送該數(shù)據(jù)存儲格式的字符串給私有注冊表讀寫層,然后由私有注冊表讀寫層將該數(shù)據(jù)存儲格式的字符串存儲到私有注冊表中。當(dāng)從私有注冊表中讀取相應(yīng)值時,采用相反的轉(zhuǎn)化,即私有注冊表讀寫層從私有注冊表中讀取字符串并交給私有注冊表操作層,由私有注冊表操作層將數(shù)據(jù)存儲格式的字符串轉(zhuǎn)換為內(nèi)存二進(jìn)制格式。其中,本實(shí)施例的私有注冊表操作層以樹狀結(jié)構(gòu)來管理私有注冊表,其中注冊表的數(shù)據(jù)項(xiàng)值存儲在注冊表鍵中,并且子鍵存儲在父鍵中。路徑值標(biāo)識了從根鍵到目標(biāo)鍵最短路徑所經(jīng)過的鍵。注冊表融合層(Virtual Registry)通過虛擬鍵(HKEY)句柄實(shí)現(xiàn)私有注冊表與系統(tǒng)注冊表的融合。具體的,通過生成虛擬HKEY句柄,并通過向虛擬HKEY句柄中注冊事件對象,則該句柄將指向一個修改通知節(jié)點(diǎn)。所有的修改通知節(jié)點(diǎn)存儲在雙向鏈表中。若重寫第一系統(tǒng)調(diào)用的操作發(fā)生,則觸發(fā)注冊的事件對象。生成虛擬鍵句柄的過程包括截獲應(yīng)用程序打開創(chuàng)建注冊表鍵值的第一系統(tǒng)調(diào)用,根據(jù)應(yīng)用程序打開創(chuàng)建注冊表鍵值的第一系統(tǒng)調(diào)用中的注冊表鍵的路徑值,返回虛擬鍵句柄;如果路徑值存在于系統(tǒng)注冊表中,則打開系統(tǒng)注冊表鍵,并將返回的句柄存儲在虛擬鍵句柄中;如果路徑值存在于私有注冊表中,則打開私有注冊表鍵,并將返回的句柄存儲在虛擬鍵句柄中;如果是創(chuàng)建新注冊表鍵,則在私有注冊表中創(chuàng)建新鍵,并將返回的句柄存儲在虛擬鍵句柄中。對于系統(tǒng)注冊表或私有注冊表來說,主要包括查詢、修改、刪除和修改通知等操作。故本實(shí)施例以查詢、修改、刪除和修改通知為例,詳細(xì)說明重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,以實(shí)現(xiàn)虛擬化的過程。對于查詢操作在生成虛擬HKEY句柄后,向虛擬HKEY中注冊虛擬注冊表查詢事件,當(dāng)與該虛擬注冊表查詢事件對應(yīng)的修改通知節(jié)點(diǎn)被觸發(fā)時,就會執(zhí)行虛擬注冊表查詢事件。也就是說,當(dāng)應(yīng)用程序查詢注冊表鍵值時,通過截獲應(yīng)用程序查詢注冊表鍵值的第一系統(tǒng)調(diào)用,與虛擬注冊表查詢事件對應(yīng)的修改通知節(jié)點(diǎn)就被觸發(fā),然后根據(jù)所截獲的第一系統(tǒng)調(diào)用中HKEY參數(shù),進(jìn)行虛擬注冊表的查詢操作。本實(shí)施例的虛擬注冊表的查詢操作包括以下操作根據(jù)第一路徑值在私有注冊表中查詢第一鍵值(實(shí)際是一字符串),如果第一鍵值存在私有注冊表中,根據(jù)第一鍵值執(zhí)行相應(yīng)操作;如果第一鍵值不存在私有注冊表中, 判斷第一路徑值是否存在刪除列表中;如果第一路徑值存在刪除列表中,返回鍵值不存在信息;如果第一路徑值不存在刪除列表中,說明該鍵值存在與系統(tǒng)注冊表中并且沒有被刪除,根據(jù)第一路徑值從系統(tǒng)注冊表中查詢第一鍵值。其中,第一鍵值是指路徑值標(biāo)識的注冊表鍵值;第一路徑值虛擬鍵句柄(HKEY)中存儲的路徑值。例如第一鍵值為時HKEY_LOCAL_MACHINE\SOFTWARE時,可以根據(jù)第一鍵值執(zhí)行查詢的操作。刪除列表是存儲應(yīng)用程序刪除的系統(tǒng)注冊表中的鍵值。通過該刪除列表可實(shí)現(xiàn)系統(tǒng)注冊表中鍵值不會被修改,可應(yīng)用程序已無法訪問系統(tǒng)注冊表中已刪除的鍵值。由上述查詢事件的操作流程可見,應(yīng)用程序優(yōu)先在私有注冊表中進(jìn)行查詢,在私有注冊表中不存在時,查詢系統(tǒng)注冊表,實(shí)現(xiàn)了私有注冊表與系統(tǒng)注冊表的融合,在一定程度上實(shí)現(xiàn)了應(yīng)用程序與操作系統(tǒng)的隔離。對于修改操作在生成虛擬HKEY句柄后,在虛擬HKEY句柄中注冊虛擬注冊表修改事件,當(dāng)與該虛擬注冊表修改事件對應(yīng)的修改通知節(jié)點(diǎn)被觸發(fā)時,就會執(zhí)行虛擬注冊表修改事件。也就是說,當(dāng)應(yīng)用程序修改注冊表鍵值時,通過截獲應(yīng)用程序修改注冊表鍵值的第一系統(tǒng)調(diào)用,與虛擬注冊表修改事件對應(yīng)的修改通知節(jié)點(diǎn)就被觸發(fā),然后根據(jù)所截獲的第一系統(tǒng)調(diào)用中HKEY參數(shù),進(jìn)行虛擬注冊表的修改操作。本實(shí)施例的虛擬注冊表的修改操作包括以下操作根據(jù)第二路徑值在私有注冊表中查詢第二鍵值,如果第二鍵值存在私有注冊表中,根據(jù)第二鍵值在私有注冊表中執(zhí)行相應(yīng)修改操作;如果第二鍵值不存在私有注冊表中,判斷第二路徑值是否存在于系統(tǒng)注冊表中;如果第二路徑值存在系統(tǒng)注冊表中,根據(jù)第二路徑值在私有注冊表中創(chuàng)建第二鍵值并執(zhí)行相應(yīng)修改操作;如果第二路徑值不存在系統(tǒng)注冊表,返回鍵值不存在信息。其中,第二鍵值是指路徑值標(biāo)識的注冊表鍵值;第二路徑值虛擬鍵句柄(HKEY)中存儲的路徑值。
由上述查詢事件的操作流程可見,應(yīng)用程序優(yōu)先在私有注冊表中進(jìn)行查詢并修改,在私有注冊表中不存在時,查詢系統(tǒng)注冊表并在私有注冊表中創(chuàng)建第二鍵值,然后在私有注冊表中進(jìn)行修改操作,實(shí)現(xiàn)了私有注冊表與系統(tǒng)注冊表的融合,在一定程度上實(shí)現(xiàn)了應(yīng)用程序與操作系統(tǒng)的隔離。對于刪除操作在生成虛擬HKEY句柄后,在虛擬HKEY句柄中注冊虛擬注冊表刪除事件,當(dāng)與該虛擬注冊表刪除事件對應(yīng)的修改通知節(jié)點(diǎn)被觸發(fā)時,就會執(zhí)行虛擬注冊表刪除事件。也就是說,當(dāng)應(yīng)用程序刪除注冊表鍵值時,通過截獲應(yīng)用程序刪除注冊表鍵值的第一系統(tǒng)調(diào)用,與虛擬注冊表刪除事件對應(yīng)的修改通知節(jié)點(diǎn)就被觸發(fā),然后根據(jù)所截獲的第一系統(tǒng)調(diào)用中HKEY參數(shù),進(jìn)行虛擬注冊表的刪除操作。本實(shí)施例的虛擬注冊表的刪除操作包括以下操作根據(jù)第三路徑值在私有注冊表中查詢第三鍵值,如果第三鍵值存在私有注冊表中,根據(jù)第三鍵值在私有注冊表中執(zhí)行相應(yīng)刪除操作,并判斷第三路徑值是否存在系統(tǒng)注冊表中;如果第三鍵值不存在私有注冊表中,直接判斷第三路徑值是否存在系統(tǒng)注冊表中;如果第三路徑值存在系統(tǒng)注冊表中,在刪除列表中記錄第三路徑值;如果第三路徑值不存在系統(tǒng)注冊表中,返回鍵值不存在信息。其中,此處的刪除列表與查詢操作中的刪除列表是同一個。一個虛擬執(zhí)行環(huán)境維護(hù)一個刪除列表。其中,第三鍵值是指路徑值標(biāo)識的注冊表鍵值;第三路徑值虛擬鍵句柄(HKEY)中存儲的路徑值。由上述可見,應(yīng)用程序優(yōu)先在私有注冊表中執(zhí)行刪除操作,并在執(zhí)行刪除操作后, 將系統(tǒng)注冊表中的存在的第三路徑值存放到刪除列表中,實(shí)現(xiàn)私有注冊表與系統(tǒng)注冊表的刪除同步,實(shí)現(xiàn)了私有注冊表與系統(tǒng)注冊表的融合,在一定程度上實(shí)現(xiàn)了應(yīng)用程序與操作系統(tǒng)的隔離。對于修改通知操作在生成虛擬HKEY句柄后,在虛擬HKEY句柄中注冊虛擬注冊表修改通知事件,當(dāng)與該虛擬注冊表修改通知事件對應(yīng)的修改通知節(jié)點(diǎn)被觸發(fā)時,就會執(zhí)行虛擬注冊表修改通知事件。也就是說,當(dāng)應(yīng)用程序修改通知注冊表鍵值時,通過截獲應(yīng)用程序修改通知注冊表鍵值的第一系統(tǒng)調(diào)用,與虛擬注冊表修改通知事件對應(yīng)的修改通知節(jié)點(diǎn)就被觸發(fā),然后根據(jù)所截獲的第一系統(tǒng)調(diào)用中HKEY參數(shù),進(jìn)行虛擬注冊表的修改通知操作。本實(shí)施例的虛擬注冊表的修改通知操作包括以下操作從版本號存儲空間中獲取私有注冊表的版本號,如果所獲取的私有注冊表的版本號與本地存儲的版本號相同,根據(jù)私有注冊表的版本號執(zhí)行相應(yīng)注冊操作;如果所獲取的私有注冊表的版本號與本地存儲的版本號不相同,重構(gòu)私有注冊表,并保存重構(gòu)的私有注冊表的版本號,并根據(jù)重構(gòu)的私有注冊表的版本號執(zhí)行相應(yīng)注冊操作;在執(zhí)行所截獲的系統(tǒng)調(diào)用所對應(yīng)的注冊表操作之后,再次從版本號存儲空間中獲取私有注冊表的版本號,如果私有注冊表的版本號發(fā)生了改變,根據(jù)第四路徑值和執(zhí)行相應(yīng)注冊操作所注冊的事件對象,激活注冊事件,發(fā)出修改通知;如果私有注冊表的版本號沒有發(fā)生改變,則退出該系統(tǒng)調(diào)用。其中,本地存儲的版本號是指應(yīng)用程序在運(yùn)行過程中所產(chǎn)生的當(dāng)前進(jìn)程所存儲的私有注冊表的版本號。其中,版本號存儲空間中的私有注冊表的版本號可以被應(yīng)用程序運(yùn)行過程所產(chǎn)生的各個進(jìn)程或線程所訪問。其中,重構(gòu)私有注冊表是指重新讀取私有注冊表文件,并在內(nèi)存中構(gòu)建索引節(jié)點(diǎn)和私有注冊表的樹狀結(jié)構(gòu)。本實(shí)施例通過在虛擬HKEY句柄中注冊虛擬注冊表查詢、修改、刪除以及修改通知等事件,實(shí)現(xiàn)了各種操作情況下系統(tǒng)注冊表與私有注冊表的融合,充分發(fā)揮了私有注冊表的作用,在配置信息上實(shí)現(xiàn)了應(yīng)用程序與操作系統(tǒng)的格式。下面詳細(xì)描述步驟102中文件訪問虛擬化的實(shí)現(xiàn)過程,如圖2B所示,主要包括以下步驟步驟1021、根據(jù)配置文件,截獲應(yīng)用程序運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用。步驟1022、獲取所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù)。步驟1023、判斷所述路徑參數(shù)的格式是否為長路徑格式;如果判斷結(jié)果為否,說明該路徑參數(shù)為短路徑格式,則執(zhí)行步驟IOM ;如果判斷結(jié)果為是,執(zhí)行步驟1025。步驟1024、將短路徑格式的路徑參數(shù)轉(zhuǎn)換為長路徑格式的路徑參數(shù),并執(zhí)行步驟 1025。步驟1025、根據(jù)路徑參數(shù)的頭部信息判斷該路徑參數(shù)是否屬于其中一個空間,如果判斷結(jié)果為是,執(zhí)行步驟10 ;如果判斷結(jié)果為否,執(zhí)行步驟1(^8。步驟1(^6、根據(jù)配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作該文件的操作類型相適應(yīng)的路徑信息,并執(zhí)行步驟1027。根據(jù)文件所屬空間的不同,以及對文件操作類型的不同,將會返回不同的路徑信息,下面逐一進(jìn)行說明。本實(shí)施例中,所述空間包括系統(tǒng)空間、軟件空間和用戶空間;所述對文件的操作類型可以是創(chuàng)建、刪除、修改或讀取。當(dāng)要操作的文件不存系統(tǒng)空間、軟件空間和用戶中間中,且對文件進(jìn)行創(chuàng)建、刪除、修改或讀取操作時,根據(jù)系統(tǒng)空間與用戶空間之間的路徑映射關(guān)系返回文件在用戶空間中的路徑信息。當(dāng)要操作的文件存在系統(tǒng)空間中,而不存在軟件空間和用戶空間中,且對文件進(jìn)行讀取操作時,根據(jù)系統(tǒng)空間與軟件空間之間的路徑映射關(guān)系返回文件在軟件空間中的路
徑信息。當(dāng)要操作的文件存在系統(tǒng)空間中,而不存在軟件空間和用戶空間中,且對文件進(jìn)行創(chuàng)建或修改操作時,根據(jù)系統(tǒng)空間與用戶空間之間的路徑映射關(guān)系返回文件在用戶空間中的路徑信息,并將文件從系統(tǒng)空間復(fù)制到用戶空間中。當(dāng)要操作的文件存在系統(tǒng)空間中,而不存在軟件空間和用戶空間中,且對文件進(jìn)行刪除操作時,根據(jù)系統(tǒng)空間與用戶空間之間的路徑映射關(guān)系返回文件在用戶空間中的路徑信息,并將文件從系統(tǒng)空間復(fù)制到用戶空間中,并將系統(tǒng)空間的路徑值存放到與系統(tǒng)空間對應(yīng)的刪除列表中。其中,通過該刪除列表,可實(shí)現(xiàn)系統(tǒng)文件不會被修改,可應(yīng)用程序卻無法訪問該文件。當(dāng)要操作的文件存在軟件空間中,而不存在用戶中間中,且對文件進(jìn)行讀取操作時,返回文件在軟件空間中的路徑信息。當(dāng)要操作的文件存在軟件空間中,而不存在用戶空間中,且對文件進(jìn)行創(chuàng)建或修改操作時,根據(jù)軟件空間與用戶空間之間的路徑映射關(guān)系返回文件在用戶空間中的路徑信息,并將所述文件從所述軟件空間復(fù)制到所述用戶空間中。
14
當(dāng)要操作的文件存在軟件空間中,而不存在用戶空間中,且對文件進(jìn)行刪除操作時,根據(jù)軟件空間與用戶空間之間的路徑映射關(guān)系返回文件在用戶空間中的路徑信息,并將文件從軟件空間復(fù)制到用戶空間中,并將軟件空間的路徑值存放到與軟件空間對應(yīng)的刪除列表中。當(dāng)要操作的文件存在用戶空間中,且對文件進(jìn)行創(chuàng)建、刪除、修改或讀取操作時, 返回文件在用戶空間中的路徑信息。本實(shí)施例還將上述返回路徑信息的過程稱為文件重定向規(guī)則,并得到如表1所示的結(jié)果。表 1
系統(tǒng)空間軟件空間用戶空間操作類型返回的路徑(System(Software(User信息space,簡 ·己為space,簡子己為space,簡 ·己為S)P)U)否否否讀/寫/刪除U是否否讀S是否否寫U是否否刪除U否否否讀P否是否寫U否是否刪除U否是/否是讀/寫/刪除U其中,在執(zhí)行步驟10 之前,本實(shí)施例已將存儲空間劃分為系統(tǒng)空間、軟件空間和用戶空間,并將系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系存儲到配置文件中。同時,在配置文件中創(chuàng)建了與系統(tǒng)空間和軟件空間一一對應(yīng)的刪除列表。步驟1027、根據(jù)返回的路徑信息對文件進(jìn)行相應(yīng)操作。該步驟1027也就是執(zhí)行系統(tǒng)調(diào)用的過程。步驟1028、結(jié)束對路徑參數(shù)修改的操作,依照原路徑參數(shù)執(zhí)行對文件的操作,并返回。當(dāng)判斷出路徑參數(shù)不存在任何空間時,結(jié)束對文件的操作。進(jìn)一步,舉例說明本實(shí)施例中應(yīng)用程序如何訪問系統(tǒng)中的文件當(dāng)應(yīng)用程序調(diào)用文件枚舉訪問函數(shù)查找符合條件的第一個文件 (FindFirstFileExff)時,記錄參數(shù)信息,并構(gòu)造三個空間的路徑信息,返回虛擬FIND文件句柄,并通過該虛擬查找(FIND)文件句柄實(shí)現(xiàn)優(yōu)先訪問用戶空間中的文件,其次是軟件空間中的文件,再次是系統(tǒng)空間中的文件。
當(dāng)應(yīng)用程序調(diào)用文件枚舉訪問函數(shù)查找下一個符合條件的文件(FindNextFileW) 時,通過虛擬FIND文件句柄,首先返回用戶空間中的文件,然后返回存在于軟件空間中但不存在于用戶空間中也不存在于刪除列表中的文件,最后返回存在于系統(tǒng)空間中但不存在于軟件空間、用戶空間中也不存在于刪除列表中的文件。當(dāng)應(yīng)用程序調(diào)用文件枚舉訪問函數(shù)關(guān)閉FIND文件句柄(FindClose)時,關(guān)閉虛擬 FIND文件句柄。通過上述操作,實(shí)現(xiàn)了應(yīng)用程序訪問文件時的虛擬化,即允許應(yīng)用程序從軟件空間和用戶空間中訪問文件,實(shí)現(xiàn)了與操作系統(tǒng)的隔離。進(jìn)一步,為了實(shí)現(xiàn)對某些系統(tǒng)調(diào)用過程中產(chǎn)生的參數(shù)或系統(tǒng)調(diào)用結(jié)束時產(chǎn)生的參數(shù)等進(jìn)行存儲,本實(shí)施例預(yù)先劃分出了參數(shù)緩存空間,并將存儲緩存空間存儲在雙向鏈表中,也就是說以雙向鏈表的形式來存儲參數(shù)。基于此,在執(zhí)行與操作文件有關(guān)的系統(tǒng)調(diào)用過程中返回路徑信息時,檢查存儲在雙向鏈表中的參數(shù)緩存空間中是否存在空閑參數(shù)節(jié)點(diǎn);如果存在空閑參數(shù)節(jié)點(diǎn),為返回的路徑信息分配參數(shù)節(jié)點(diǎn),并將返回的路徑信息存儲到所分配的參數(shù)節(jié)點(diǎn)中,并將所述分配的參數(shù)節(jié)點(diǎn)標(biāo)識未已被分配;如果不存在空閑參數(shù)節(jié)點(diǎn),為返回的路徑信息創(chuàng)建參數(shù)節(jié)點(diǎn), 并將所創(chuàng)建的參數(shù)節(jié)點(diǎn)插入雙向鏈表中的參數(shù)緩存空間中,同時將返回的路徑信息存儲到所創(chuàng)建的參數(shù)節(jié)點(diǎn)中,并將所創(chuàng)建的參數(shù)節(jié)點(diǎn)標(biāo)識未已被分配。其中,參數(shù)節(jié)點(diǎn)就是一小塊內(nèi)存空間。進(jìn)一步,當(dāng)應(yīng)用程序根據(jù)返回的路徑信息對文件進(jìn)行相應(yīng)操作結(jié)束后,就會將釋放返回的路徑信息所占用的參數(shù)節(jié)點(diǎn),此時,判斷被釋放的參數(shù)節(jié)點(diǎn)是否來自參數(shù)緩存空間;如果被釋放的參數(shù)節(jié)點(diǎn)來自參數(shù)緩存空間,將被釋放的參數(shù)節(jié)點(diǎn)收回并將收回的參數(shù)節(jié)點(diǎn)標(biāo)識未未被使用,以便于其他參數(shù)使用該參數(shù)節(jié)點(diǎn)進(jìn)行存儲。其中,對于應(yīng)用程序在運(yùn)行過程中返回的或需要修改的各種參數(shù)均可以使用雙向鏈表中的參數(shù)緩存空間進(jìn)行緩存,并不限于對文件操作過程中返回的路徑信息,例如后面出現(xiàn)的在對系統(tǒng)對象進(jìn)行重命名過程中需要修改的參數(shù)(例如重命名后的系統(tǒng)對象名) 也可以使用雙向鏈表中的參數(shù)緩存空間進(jìn)行緩存。本實(shí)施例提供一種參數(shù)節(jié)點(diǎn)的實(shí)現(xiàn)結(jié)構(gòu),包括標(biāo)志位字段用于標(biāo)識該參數(shù)節(jié)點(diǎn)是否被使用,例如填充Oxffff表示該節(jié)點(diǎn)未被使用;0x0表示該節(jié)點(diǎn)正被使用,即已被分配;內(nèi)存空間用來存儲參數(shù)的內(nèi)存空間;內(nèi)存空間長度字段表示存儲參數(shù)的內(nèi)存空間的實(shí)際長度。雙向鏈表結(jié)構(gòu)如圖2C所示。通過雙向鏈表對參數(shù)進(jìn)行緩存,可以提高所實(shí)現(xiàn)的虛擬環(huán)境的性能和可用性。圖3為本發(fā)明另一實(shí)施例提供的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法的流程圖。 本實(shí)施例基于圖1所示實(shí)施例實(shí)現(xiàn),如圖3所示,本實(shí)施例的方法在步驟102之后還包括步驟103、根據(jù)配置文件,攔截應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)對象有關(guān)的第三系統(tǒng)調(diào)用,以所創(chuàng)建的與第三系統(tǒng)調(diào)用所調(diào)用的系統(tǒng)對象相關(guān)的第一個進(jìn)行的進(jìn)程號為標(biāo)識,使用標(biāo)識對所述系統(tǒng)對象進(jìn)行重命名操作,根據(jù)重命名的系統(tǒng)對象名對系統(tǒng)對象進(jìn)行操作。在本實(shí)施例中,為實(shí)現(xiàn)應(yīng)用程序虛擬化環(huán)境中各應(yīng)用程序之間的隔離,在訪問系統(tǒng)對象時,需要對系統(tǒng)對象進(jìn)行重命名,以虛擬化執(zhí)行環(huán)境間共享的系統(tǒng)對象。其中,對系
16統(tǒng)對象的訪問包括打開一個系統(tǒng)對象或者查詢系統(tǒng)對象是否存在。基于此,本實(shí)施例根據(jù)采用本實(shí)施例提供的虛擬化環(huán)境創(chuàng)建的第一個進(jìn)程的進(jìn)程號作為標(biāo)識,對系統(tǒng)對象進(jìn)行重命名操作的過程包括當(dāng)查詢一個系統(tǒng)對象是否存在時,首先使用原系統(tǒng)對象名判斷該系統(tǒng)對象是否存在;如果不存在,在原系統(tǒng)對象名后追加與該系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,以對該系統(tǒng)對象進(jìn)行重命名,然后根據(jù)重命名的系統(tǒng)對象名創(chuàng)建該系統(tǒng)對象。當(dāng)打開一個系統(tǒng)對象時,首先使用原系統(tǒng)對象名判斷是否可以打開該系統(tǒng)對象; 如果系統(tǒng)對象不可以被打開,則在原系統(tǒng)對象名后追加與該系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,以對該系統(tǒng)對象進(jìn)行重命名,然后根據(jù)重命名的系統(tǒng)對象名打開該系統(tǒng)對象。步驟104、根據(jù)配置文件,攔截應(yīng)用程序在運(yùn)行過程中調(diào)用的與傳遞消息有關(guān)的第四系統(tǒng)調(diào)用,根據(jù)與應(yīng)用程序?qū)?yīng)的共享內(nèi)存空間,對根據(jù)第四系統(tǒng)調(diào)用創(chuàng)建的進(jìn)程進(jìn)行控制操作,所述共享內(nèi)存空間用于存儲與應(yīng)用程序?qū)?yīng)的進(jìn)程的進(jìn)程號。為了實(shí)現(xiàn)應(yīng)用程序虛擬化環(huán)境中,應(yīng)用程序之間的隔離,還需要限制虛擬執(zhí)行環(huán)境中進(jìn)程間的通信。為此,本實(shí)施例根據(jù)配置文件,攔截應(yīng)用程序調(diào)用的與傳遞消息有關(guān)的系統(tǒng)調(diào)用(即第四系統(tǒng)調(diào)用),據(jù)此獲取執(zhí)行環(huán)境中的存在進(jìn)程。在執(zhí)行上述任一系統(tǒng)調(diào)用時,該系統(tǒng)調(diào)用會創(chuàng)建進(jìn)程,并會為所創(chuàng)建的進(jìn)程分配進(jìn)程號,而且該系統(tǒng)調(diào)用所產(chǎn)生的進(jìn)程主要用于傳遞消息,也就是說需要與其他進(jìn)程進(jìn)行通信。為了實(shí)現(xiàn)限制進(jìn)程間通信,本實(shí)施例通過為該應(yīng)用程序創(chuàng)建一共享內(nèi)存空間,允許屬于該應(yīng)用程序的進(jìn)程訪問該共享內(nèi)存空間,而不屬于該應(yīng)用程序的進(jìn)程不能訪問該共享內(nèi)存空間,并且該共享內(nèi)存空間用于存儲該應(yīng)用程序下的進(jìn)程的進(jìn)程號。其中,存在于同一進(jìn)程中的線程間可以通信,對于同一應(yīng)用程序的各個進(jìn)程中的線程間也可以通信;而不同應(yīng)用程序的進(jìn)程中的線程不可以通信。其中,通過線程號可以找到該線程所依存的進(jìn)程,進(jìn)而根據(jù)進(jìn)程號判斷該線程是否屬于當(dāng)前應(yīng)用程序。具體的,當(dāng)系統(tǒng)調(diào)用創(chuàng)建的進(jìn)程在啟動時,先將該進(jìn)程的進(jìn)程號注冊到共享內(nèi)存空間中。當(dāng)進(jìn)程請求與一目標(biāo)進(jìn)程(即第一目標(biāo)進(jìn)程)通信時,檢查第一目標(biāo)進(jìn)程的進(jìn)程號是否存在共享內(nèi)存空間中,如果是,允許該進(jìn)程與第一目標(biāo)進(jìn)程通信,如果否,拒絕該進(jìn)程與第一目標(biāo)進(jìn)程通信。另外,當(dāng)有目標(biāo)進(jìn)程(即第二目標(biāo)進(jìn)程)請求與該進(jìn)程通信時,讀取目標(biāo)進(jìn)程的進(jìn)程號,檢查目標(biāo)進(jìn)程的進(jìn)程號是否存在共享內(nèi)存空間中,如果是,允許該進(jìn)程與目標(biāo)進(jìn)程通信,如果否,拒絕該進(jìn)程與目標(biāo)進(jìn)程通信。第一目標(biāo)進(jìn)程和第二目標(biāo)進(jìn)程都是進(jìn)程。進(jìn)一步,當(dāng)進(jìn)程退出時,將該進(jìn)程的進(jìn)程號從共享內(nèi)存空間中刪除。由此可見,通過上述方式實(shí)現(xiàn)了限制進(jìn)程間通信的目的,提高了應(yīng)用程序之間的隔離度,使得在同一操作系統(tǒng)中可以同時運(yùn)行多個應(yīng)用程序。本實(shí)施例在實(shí)現(xiàn)應(yīng)用程序虛擬化的基礎(chǔ)上,進(jìn)一步通過系統(tǒng)對象的虛擬化和對進(jìn)程間通信的限制,使得應(yīng)用程序之間實(shí)現(xiàn)隔離,允許同一操作系統(tǒng)中同時運(yùn)行多個應(yīng)用程序。在上述各實(shí)施例中,應(yīng)用程序在運(yùn)行過程中會創(chuàng)建多進(jìn)程、多線程,并且在多進(jìn)程、多線程間存在共享數(shù)據(jù),因此需要維護(hù)共享數(shù)據(jù)的一致性。為了防止多進(jìn)程或多線程彼此在訪問共享數(shù)據(jù)時產(chǎn)生矛盾,本實(shí)施例提供一種實(shí)現(xiàn)機(jī)制,即為進(jìn)程和線程分別建立關(guān)鍵域,實(shí)現(xiàn)對各進(jìn)程和各線程之間的隔離。例如為線程或進(jìn)程建立一關(guān)鍵域,當(dāng)某一線程或進(jìn)程對共享數(shù)據(jù)進(jìn)行操作時,首先進(jìn)入該關(guān)鍵域,這樣其他線程或進(jìn)程就無法對該共享數(shù)據(jù)進(jìn)行操作,從而保證了各線程或各進(jìn)程所共享的數(shù)據(jù)的一致性?;谏鲜鼋㈥P(guān)鍵域的方案,上述步驟103中在原系統(tǒng)對象名后追加與系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,以對系統(tǒng)對象進(jìn)行重命名的操作可通過以下步驟實(shí)現(xiàn)首先,進(jìn)入第一關(guān)鍵域,并在第一關(guān)鍵域中執(zhí)行后續(xù)操作。所述后續(xù)操作包括從雙向鏈表中的參數(shù)緩存空間中申請空閑參數(shù)節(jié)點(diǎn),該空閑參數(shù)節(jié)點(diǎn)用于存儲重命名后的系統(tǒng)對象名;然后,在原系統(tǒng)對象名后追加與系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,得到重命名后的系統(tǒng)對象名,并將重命名后的系統(tǒng)對象名存儲到所申請的空閑參數(shù)節(jié)點(diǎn)中。并在修改參數(shù)后立即離開第一關(guān)鍵域。通過上述操作,當(dāng)有多個線程同時訪問同一系統(tǒng)對象時,可以防止同時對系統(tǒng)對象名進(jìn)行重命名造成沖突?;谏鲜鼋㈥P(guān)鍵域的方案,上述步驟101中在虛擬HKEY句柄中所注冊的各種與虛擬注冊表有關(guān)的事件具體可以在關(guān)鍵域中執(zhí)行。例如對于虛擬注冊表查詢事件在根據(jù)第一路徑值在所述私有注冊表中查詢第一鍵值之前,可以先執(zhí)行如下操作進(jìn)入第二關(guān)鍵域,并從版本號存儲空間中讀取私有注冊表的版本號;將所讀取的私有注冊表的版本號與本地存儲的版本號進(jìn)行比較,判斷是否需要重構(gòu)私有注冊表;如果判斷結(jié)果為是,則重構(gòu)私有注冊表,然后再執(zhí)行根據(jù)第一路徑值在重構(gòu)的私有注冊表中查詢第一鍵值以及其他操作;如果判斷結(jié)果為否,則直接執(zhí)行根據(jù)第一路徑值在原私有注冊表中查詢第一鍵值以及其他操作。當(dāng)虛擬注冊表查詢事件結(jié)束后,離開第二關(guān)鍵域。另外,對于虛擬注冊表修改事件或虛擬注冊表刪除事件在根據(jù)第二路徑值在所述私有注冊表中查詢第二鍵值之前,或者在根據(jù)第三路徑值在所述私有注冊表中查詢第三鍵值之前,也可以先執(zhí)行如下操作進(jìn)入第二關(guān)鍵域,并從版本號存儲空間中讀取私有注冊表的版本號;將所讀取的私有注冊表的版本號與本地存儲的版本號進(jìn)行比較,判斷是否需要重構(gòu)私有注冊表;如果判斷結(jié)果為是,則重構(gòu)私有注冊表,然后再執(zhí)行根據(jù)第二路徑值或第三路徑值在重構(gòu)的私有注冊表中查詢第二鍵值或第三鍵值以及其他操作;如果判斷結(jié)果為否,則直接執(zhí)行根據(jù)第二路徑值或第三路徑值在原私有注冊表中查詢第二鍵值或第三鍵值以及其他操作。當(dāng)虛擬注冊表修改事件或虛擬注冊表刪除事件結(jié)束后,離開第二關(guān)鍵域。進(jìn)一步,在進(jìn)入第二關(guān)鍵域之前包括應(yīng)用程序的當(dāng)前進(jìn)程執(zhí)行打開版本號存儲空間的操作,并判斷打開操作是否成功;如果打開操作成功,讀取版本號存儲空間中的私有注冊表的版本號,并將讀取的私有注冊表的版本號存儲在本地;如果打開操作失敗,創(chuàng)建版本號存儲空間,并初始化私有注冊表的版本號,將初始化得到的私有注冊表的版本號分別存儲到所創(chuàng)建的版本號存儲空間和本地。所述本地是指當(dāng)前進(jìn)程存在的空間中。通過上述操作,可以實(shí)現(xiàn)對當(dāng)前進(jìn)程的私有注冊表版本號的初始化。基于上述各實(shí)施例或?qū)嵤┓绞?,本?shí)施例給出本發(fā)明所實(shí)現(xiàn)的面向應(yīng)用程序的虛擬執(zhí)行環(huán)境的一種系統(tǒng)結(jié)構(gòu),主要包括1、截獲系統(tǒng)調(diào)用根據(jù)配置文件來截獲相應(yīng)的系統(tǒng)調(diào)用,實(shí)現(xiàn)可配置地虛擬不同組件。2、虛擬注冊表重寫與系統(tǒng)注冊表操作相關(guān)的系統(tǒng)調(diào)用,采用寫拷貝(Copy-On-Write ;簡稱為C0W)機(jī)制來協(xié)助應(yīng)用程序?qū)ο到y(tǒng)注冊表和私有注冊表的訪問。3、文件訪問虛擬化重寫與文件操作相關(guān)的系統(tǒng)調(diào)用中的路徑名參數(shù),并采用COW機(jī)制來協(xié)助應(yīng)用程序?qū)τ脩艨臻g、軟件空間和用戶空間的訪問。4、系統(tǒng)對象虛擬化 重寫與系統(tǒng)對象操作相關(guān)的系統(tǒng)調(diào)用中的對象名,協(xié)助應(yīng)用程序?qū)υ到y(tǒng)對象和私有對象的訪問。5、限制進(jìn)程間的通信限制應(yīng)用程序僅可向其所在的執(zhí)行環(huán)境中的對象發(fā)送消息, 實(shí)現(xiàn)應(yīng)用程序的多實(shí)例運(yùn)行。本實(shí)施例的面向應(yīng)用程序的虛擬化執(zhí)行環(huán)境的啟動過程如下步驟1、加載程序從配置文件(setting, ini)或命令行中讀取配置信息,其中命令行的配置信息優(yōu)先于配置文件中的配置信息。配置文件主要包含的屬性有(1)啟動執(zhí)行文件名(MartExeName)啟動Exe文件的相對路徑;⑵虛擬注冊表(VirtualRegistry)虛擬注冊表文件的相對路徑;(3) 文件重定向(FileRedirection)文件訪問重定向配置文件的相對路徑;(4)系統(tǒng)對象 (SystemObject)是否虛擬化系統(tǒng)對象;(5)內(nèi)部進(jìn)程(Interprocess)是否限制進(jìn)程間的
ififn。步驟2、將配置信息寫入當(dāng)前進(jìn)程的環(huán)境變量中,步驟3、創(chuàng)建子進(jìn)程,啟動應(yīng)用程序的可執(zhí)行文件,并將掛鉤動態(tài)鏈接庫 (detoured. dll)和注入動態(tài)鏈接庫(ApplicationExeAssistant. dll)注入到子進(jìn)程中。步驟4、子進(jìn)程加載其所依賴的ApplicationExeAssistant. dll動態(tài)鏈接庫, ApplicationExeAssistant. dll中的動態(tài)鏈接庫主函數(shù)(DllMain)函數(shù)被調(diào)用。步驟5、在DllMain中讀取環(huán)境變量值,并根據(jù)環(huán)境變量值將修改后的系統(tǒng)調(diào)用掛鉤在原系統(tǒng)調(diào)用中。步驟6、應(yīng)用程序運(yùn)行過程中,當(dāng)調(diào)用到被掛鉤的系統(tǒng)調(diào)用時,會執(zhí)行修改后的系統(tǒng)調(diào)用的相關(guān)操作。步驟7、應(yīng)用程序退出后,加載程序也退出。本發(fā)明所實(shí)現(xiàn)的面向應(yīng)用程序的虛擬執(zhí)行環(huán)境具有以下有益效果(1)通過將應(yīng)用程序運(yùn)行過程中所依賴的配置信息和運(yùn)行文件存放在獨(dú)立空間中,并將用戶在使用應(yīng)用程序過程中產(chǎn)生的個性化定制數(shù)據(jù)和私有文件數(shù)據(jù)保存獨(dú)立空間中,同時整合應(yīng)用程序?qū)τ脩糍Y源、軟件資源和系統(tǒng)資源的訪問,降低了應(yīng)用程序與操作系統(tǒng)的耦合度。(2)通過虛擬化虛擬執(zhí)行環(huán)境間共享的系統(tǒng)對象,并限制虛擬執(zhí)行環(huán)境間的通信,實(shí)現(xiàn)虛擬執(zhí)行環(huán)境之間比較完全的隔離,使得在同一操作系統(tǒng)中可運(yùn)行同一應(yīng)用程序的多個實(shí)例,提高了應(yīng)用程序間的隔離度。(3)通過在用戶層,實(shí)現(xiàn)一個面向應(yīng)用程序的單用戶、單程序的輕量級虛擬執(zhí)行環(huán)境,并采用參數(shù)緩存、共享數(shù)據(jù)一致性維護(hù)和優(yōu)化虛擬注冊表等方法提高虛擬執(zhí)行環(huán)境的性能和可用性,提高了資源利用率和執(zhí)行效率。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計(jì)算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。最后應(yīng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范
圍。 20
權(quán)利要求
1.一種Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,包括根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用,使用在所述應(yīng)用程序執(zhí)行時注入的動態(tài)鏈接庫中的系統(tǒng)調(diào)用,重寫所截獲的第一系統(tǒng)調(diào)用,并使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表,以使所述應(yīng)用程序根據(jù)所述虛擬注冊表對所述私有注冊表和所述系統(tǒng)注冊表進(jìn)行訪問;根據(jù)所述配置文件,截獲所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用,根據(jù)所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù),獲取文件所屬的空間,并根據(jù)所述配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)所述路徑信息對所述文件進(jìn)行操作。
2.根據(jù)權(quán)利要求1所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,所述根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用,使用在所述應(yīng)用程序執(zhí)行時注入的動態(tài)鏈接庫中的系統(tǒng)調(diào)用,重寫所截獲的第一系統(tǒng)調(diào)用,并使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表,以使所述應(yīng)用程序根據(jù)所述虛擬注冊表對所述私有注冊表和所述系統(tǒng)注冊表進(jìn)行訪問包括截獲所述應(yīng)用程序打開創(chuàng)建注冊表鍵值的第一系統(tǒng)調(diào)用,根據(jù)所述應(yīng)用程序打開創(chuàng)建注冊表鍵值的第一系統(tǒng)調(diào)用中的注冊表鍵的路徑值,返回虛擬鍵句柄;如果所述路徑值存在于所述系統(tǒng)注冊表中,則打開系統(tǒng)注冊表鍵,并將返回的句柄存儲在所述虛擬鍵句柄中; 如果所述路徑值存在于所述私有注冊表中,則打開私有注冊表鍵,并將返回的句柄存儲在虛擬鍵句柄中;如果是創(chuàng)建新注冊表鍵,則在所述私有注冊表中創(chuàng)建新鍵,并將返回的句柄存儲在虛擬鍵句柄中;截獲所述應(yīng)用程序查詢注冊表鍵值的第一系統(tǒng)調(diào)用,并根據(jù)所述應(yīng)用程序查詢注冊表鍵值的第一系統(tǒng)調(diào)用中虛擬鍵句柄參數(shù),進(jìn)行所述虛擬注冊表的查詢操作;所述虛擬注冊表的查詢操作包括根據(jù)第一路徑值在所述私有注冊表中查詢第一鍵值,如果所述第一鍵值存在所述私有注冊表中,根據(jù)所述第一鍵值執(zhí)行相應(yīng)操作;如果所述第一鍵值不存在所述私有注冊表中,判斷所述第一路徑值是否存在于刪除列表中;如果所述第一路徑值存在所述刪除列表中,返回鍵值不存在信息;如果所述第一路徑值不存在所述刪除列表中,根據(jù)所述第一路徑值從所述系統(tǒng)注冊表中查詢所述第一鍵值;截獲所述應(yīng)用程序修改注冊表鍵值的第一系統(tǒng)調(diào)用,并根據(jù)所述應(yīng)用程序修改注冊表鍵值的第一系統(tǒng)調(diào)用中虛擬鍵句柄參數(shù),進(jìn)行虛擬注冊表的修改操作;所述虛擬注冊表的修改操作包括根據(jù)第二路徑值在所述私有注冊表中查詢第二鍵值,如果所述第二鍵值存在所述私有注冊表中,根據(jù)所述第二鍵值在所述私有注冊表中執(zhí)行相應(yīng)修改操作;如果所述第二鍵值不存在所述私有注冊表中,判斷第二路徑值是否存在于所述系統(tǒng)注冊表中;如果所述第二路徑值存在所述系統(tǒng)注冊表中,根據(jù)所述第二路徑值在所述私有注冊表中創(chuàng)建所述第二鍵值并執(zhí)行相應(yīng)修改操作;如果所述第二路徑值不存在所述系統(tǒng)注冊表,返回鍵值不存在信息;截獲所述應(yīng)用程序刪除注冊表鍵值的第一系統(tǒng)調(diào)用,并根據(jù)所述應(yīng)用程序刪除注冊表鍵值的第一系統(tǒng)調(diào)用中虛擬鍵句柄參數(shù),進(jìn)行虛擬注冊表的刪除操作;所述虛擬注冊表的刪除操作包括根據(jù)第三路徑值在所述私有注冊表中查詢第三鍵值,如果所述第三鍵值存在所述私有注冊表中,根據(jù)所述第三鍵值在所述私有注冊表中執(zhí)行相應(yīng)刪除操作,并判斷所述第三路徑值是否存在所述系統(tǒng)注冊表中;如果所述第三鍵值不存在所述私有注冊表中,直接判斷所述第三路徑值是否存在所述系統(tǒng)注冊表中;如果所述第三路徑值存在所述系統(tǒng)注冊表中,在所述刪除列表中記錄所述第三路徑值;如果所述第三路徑值不存在所述系統(tǒng)注冊表中,返回鍵值不存在信息;截獲所述應(yīng)用程序修改通知注冊表鍵值的第一系統(tǒng)調(diào)用,并根據(jù)所述應(yīng)用程序修改通知虛擬注冊表鍵值的第一系統(tǒng)調(diào)用中虛擬鍵句柄參數(shù),進(jìn)行虛擬注冊表的修改通知操作; 所述虛擬注冊表的修改通知操作包括獲取所述私有注冊表的版本號,如果所獲取的私有注冊表的版本號與本地存儲的版本號相同,根據(jù)所述私有注冊表的版本號執(zhí)行相應(yīng)注冊操作;如果所獲取的私有注冊表的版本號與本地存儲的版本號不相同,重構(gòu)所述私有注冊表, 并保存重構(gòu)的私有注冊表的版本號,并根據(jù)重構(gòu)的私有注冊表的版本號執(zhí)行相應(yīng)注冊操作;在執(zhí)行相應(yīng)注冊操作之后,再次獲取所述私有注冊表的版本號,如果所述私有注冊表的版本號發(fā)生了改變,根據(jù)第四路徑值和執(zhí)行相應(yīng)注冊操作所注冊的事件對象發(fā)出修改事件通知;如果所述私有注冊表的版本號沒有發(fā)生改變,則返回。
3.根據(jù)權(quán)利要求1所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,所述根據(jù)所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù),獲取文件所屬的空間,并根據(jù)所述配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)所述路徑信息對所述文件進(jìn)行操作包括判斷所述路徑參數(shù)的格式是否為長路徑格式;如果所述路徑參數(shù)的路徑格式為短路徑格式,將短路徑格式的路徑參數(shù)轉(zhuǎn)換為長路徑格式的路徑參數(shù);當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件不存在于所述系統(tǒng)空間、所述軟件空間和所述用戶空間中,且對所述文件進(jìn)行創(chuàng)建、刪除、修改或讀取操作時,根據(jù)所述系統(tǒng)空間與所述用戶空間之間的路徑映射關(guān)系返回所述文件在所述用戶空間中的路徑信息;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述系統(tǒng)空間中,而不存在所述軟件空間和所述用戶空間中,且對所述文件進(jìn)行讀取操作時,根據(jù)所述系統(tǒng)空間與所述軟件空間之間的路徑映射關(guān)系返回所述文件在所述軟件空間中的路徑信息;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述系統(tǒng)空間中,而不存在所述軟件空間和所述用戶空間中,且對所述文件進(jìn)行創(chuàng)建或修改操作時,根據(jù)所述系統(tǒng)空間與所述用戶空間之間的路徑映射關(guān)系返回所述文件在所述用戶空間中的路徑信息,并將所述文件從所述系統(tǒng)空間復(fù)制到所述用戶空間中;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述系統(tǒng)空間中,而不存在所述軟件空間和所述用戶空間中,且對所述文件進(jìn)行刪除操作時,根據(jù)所述系統(tǒng)空間與所述用戶空間之間的路徑映射關(guān)系返回所述文件在所述用戶空間中的路徑信息,并將所述文件從所述系統(tǒng)空間復(fù)制到所述用戶空間中,并將所述系統(tǒng)空間的路徑值存放到與所述系統(tǒng)空間對應(yīng)的刪除列表中;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述軟件空間中,而不存在所述用戶中間中,且對所述文件進(jìn)行讀取操作時,返回所述文件在所述軟件空間中的路徑信息;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述軟件空間中,而不存在所述用戶空間中,且對所述文件進(jìn)行創(chuàng)建或修改操作時,根據(jù)所述軟件空間與所述用戶空間之間的路徑映射關(guān)系返回所述文件在所述用戶空間中的路徑信息,并將所述文件從所述軟件空間復(fù)制到所述用戶空間中;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述軟件空間中,而不存在所述用戶空間中,且對所述文件進(jìn)行刪除操作時,根據(jù)所述軟件空間與所述用戶空間之間的路徑映射關(guān)系返回所述文件在所述用戶空間中的路徑信息,并將所述文件從軟件空間復(fù)制到所述用戶空間中,并將所述軟件空間的路徑值存放到與所述軟件空間對應(yīng)的刪除列表中;當(dāng)根據(jù)所述路徑參數(shù)的頭部信息判斷出所述文件存在所述用戶空間中,且對所述文件進(jìn)行創(chuàng)建、刪除、修改或讀取操作時,返回所述文件在所述用戶空間中的路徑信息; 根據(jù)返回的路徑信息對所述文件進(jìn)行相應(yīng)操作。
4.根據(jù)權(quán)利要求3所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,所述根據(jù)所述配置文件,截獲所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用, 根據(jù)所截獲的第二系統(tǒng)調(diào)用中的路徑參數(shù),獲取文件所屬的空間,并根據(jù)所述配置文件中存儲的系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)所述路徑信息對所述文件進(jìn)行操作之前包括將存儲空間劃分為所述系統(tǒng)空間、所述軟件空間和所述用戶空間,并將所述系統(tǒng)空間、 所述軟件空間和所述用戶空間相互之間的路徑映射關(guān)系存儲到所述配置文件中; 在所述配置文件中創(chuàng)建與所述系統(tǒng)空間和所述軟件空間一一對應(yīng)的刪除列表。
5.根據(jù)權(quán)利要求1-4任一項(xiàng)所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于, 還包括根據(jù)所述配置文件,攔截所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)對象有關(guān)的第三系統(tǒng)調(diào)用,以所創(chuàng)建的與所述第三系統(tǒng)調(diào)用所調(diào)用的系統(tǒng)對象相關(guān)的第一個進(jìn)行的進(jìn)程號為標(biāo)識,使用所述標(biāo)識對所述系統(tǒng)對象進(jìn)行重命名操作,根據(jù)重命名的系統(tǒng)對象名對所述系統(tǒng)對象進(jìn)行操作;根據(jù)配置文件,攔截所述應(yīng)用程序在運(yùn)行過程中調(diào)用的與傳遞消息有關(guān)的第四系統(tǒng)調(diào)用,根據(jù)在與所述應(yīng)用程序?qū)?yīng)的共享內(nèi)存空間中存儲的進(jìn)程號,對所述應(yīng)用程序運(yùn)行過程中創(chuàng)建的進(jìn)程進(jìn)行限制控制操作,以限制控制所述應(yīng)用程序創(chuàng)建的進(jìn)程與其他應(yīng)用程序創(chuàng)建的進(jìn)程間的通信。
6.根據(jù)權(quán)利要求5所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,所述以所創(chuàng)建的與所述第三系統(tǒng)調(diào)用所調(diào)用的系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號為標(biāo)識,使用所述標(biāo)識對所述系統(tǒng)對象進(jìn)行重命名操作,根據(jù)重命名的系統(tǒng)對象名對所述系統(tǒng)對象進(jìn)行操作包括使用原系統(tǒng)對象名判斷所述系統(tǒng)對象是否存在或者是否可以被打開; 如果所述系統(tǒng)對象不存在或不可以被打開,檢查所述原系統(tǒng)對象名中是否存在所述系統(tǒng)對象所屬進(jìn)程的信息;如果判斷結(jié)果為不存在,則在所述原系統(tǒng)對象名后追加與所述系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,以對所述系統(tǒng)對象進(jìn)行重命名;根據(jù)重命名的系統(tǒng)對象名,執(zhí)行創(chuàng)建或打開所述系統(tǒng)對象的操作。
7.根據(jù)權(quán)利要求5所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,根據(jù)在與所述應(yīng)用程序?qū)?yīng)的共享內(nèi)存空間中存儲的進(jìn)程號,對所述應(yīng)用程序運(yùn)行過程中創(chuàng)建的進(jìn)程進(jìn)行限制控制操作,以限制控制所述應(yīng)用程序創(chuàng)建的進(jìn)程與其他應(yīng)用程序創(chuàng)建的進(jìn)程間的通信包括當(dāng)所述應(yīng)用程序運(yùn)行過程中創(chuàng)建的進(jìn)程啟動時,將所述進(jìn)程的進(jìn)程號注冊到所述共享內(nèi)存空間中;當(dāng)所述進(jìn)程請求與第一目標(biāo)進(jìn)程通信時,檢查所述第一目標(biāo)進(jìn)程的進(jìn)程號是否存在所述共享內(nèi)存空間中,如果是,允許所述進(jìn)程與所述第一目標(biāo)進(jìn)程通信,如果否,拒絕所述進(jìn)程與所述第一目標(biāo)進(jìn)程通信;當(dāng)所述進(jìn)程退出時,將所述進(jìn)程的進(jìn)程號從所述共享內(nèi)存空間中刪除。
8.根據(jù)權(quán)利要求3或4所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,還包括在返回路徑信息時,檢查存儲在雙向鏈表中的參數(shù)緩存空間中是否存在空閑參數(shù)節(jié)占. 如果存在空閑參數(shù)節(jié)點(diǎn),為所述返回的路徑信息分配參數(shù)節(jié)點(diǎn),并將所述返回的路徑信息存儲到所分配的參數(shù)節(jié)點(diǎn)中,并將所分配的參數(shù)節(jié)點(diǎn)標(biāo)識為已被分配;如果不存在空閑參數(shù)節(jié)點(diǎn),為所述返回的路徑信息創(chuàng)建參數(shù)節(jié)點(diǎn),并將所創(chuàng)建的參數(shù)節(jié)點(diǎn)插入所述雙向鏈表中的參數(shù)緩存空間中,同時將所述返回的路徑信息存儲到所創(chuàng)建的參數(shù)節(jié)點(diǎn)中,并將所創(chuàng)建的參數(shù)節(jié)點(diǎn)標(biāo)識為已被分配;在根據(jù)返回的路徑信息對所述文件進(jìn)行相應(yīng)操作結(jié)束時,判斷被釋放的參數(shù)節(jié)點(diǎn)是否來自所述參數(shù)緩存空間,如果被釋放的參數(shù)節(jié)點(diǎn)來自所述參數(shù)緩存空間,將被釋放的參數(shù)節(jié)點(diǎn)收回并將收回的參數(shù)節(jié)點(diǎn)標(biāo)識為未被使用。
9.根據(jù)權(quán)利要求6所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,在所述原系統(tǒng)對象名后追加與所述系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,以對所述系統(tǒng)對象進(jìn)行重命名包括進(jìn)入第一關(guān)鍵域;從雙向鏈表中的參數(shù)緩存空間中申請空閑參數(shù)節(jié)點(diǎn);在所述原系統(tǒng)對象名后追加與所述系統(tǒng)對象相關(guān)的第一個進(jìn)程的進(jìn)程號,得到重命名后的系統(tǒng)對象名;將重命名后的系統(tǒng)對象名存儲到所申請的空閑參數(shù)節(jié)點(diǎn)中; 離開所述第一關(guān)鍵域。
10.根據(jù)權(quán)利要求2所述的Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法,其特征在于,在根據(jù)第一路徑值在所述私有注冊表中查詢第一鍵值之前,或者在根據(jù)第二路徑值在所述私有注冊表中查詢第二鍵值之前,或者在根據(jù)第三路徑值在所述私有注冊表中查詢第三鍵值之前包括進(jìn)入第二關(guān)鍵域;從版本號存儲空間中讀取私有注冊表的版本號;將所讀取的私有注冊表的版本號與本地存儲的版本號進(jìn)行比較,判斷是否需要重構(gòu)所述私有注冊表;如果判斷結(jié)果為是,則重構(gòu)所述私有注冊表;當(dāng)所述虛擬注冊表查詢事件結(jié)束之后,或者當(dāng)所述虛擬注冊表修改事件結(jié)束之后,或者當(dāng)所述虛擬注冊表刪除事件結(jié)束之后,還包括 離開所述第二關(guān)鍵域。
全文摘要
本發(fā)明提供一種Windows應(yīng)用程序虛擬化的實(shí)現(xiàn)方法。該方法包括根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與系統(tǒng)注冊表有關(guān)的第一系統(tǒng)調(diào)用,重寫所截獲的第一系統(tǒng)調(diào)用,并使用重寫后的系統(tǒng)調(diào)用將私有注冊表和系統(tǒng)注冊表進(jìn)行融合,形成虛擬注冊表;根據(jù)配置文件,截獲應(yīng)用程序在運(yùn)行過程中調(diào)用的與文件操作有關(guān)的第二系統(tǒng)調(diào)用,獲取文件所屬的空間,并根據(jù)系統(tǒng)空間、軟件空間和用戶空間相互之間的路徑映射關(guān)系,返回與操作所述文件的操作類型相適應(yīng)的路徑信息,然后,根據(jù)路徑信息對文件進(jìn)行操作。本發(fā)明技術(shù)方案降低了應(yīng)用程序與操作系統(tǒng)的耦合度,降低了運(yùn)行在同一操作系統(tǒng)中的應(yīng)用程序間的干擾。
文檔編號G06F9/44GK102520944SQ201110402069
公開日2012年6月27日 申請日期2011年12月6日 優(yōu)先權(quán)日2011年12月6日
發(fā)明者孫海雷, 康俊彬, 懷進(jìn)鵬, 沃天宇, 胡春明 申請人:北京航空航天大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1