專利名稱:標注虛擬應用進程的制作方法
標注虛擬應用進程
背景技術:
在計算機科學中,虛擬機是執(zhí)行類似真實物理硬件的程序的機器(計算機)的軟件實現(xiàn)。系統(tǒng)虛擬機(有時稱為硬件虛擬機)允許在不同的虛擬機之間共享底層物理機器資源,每個虛擬機運行其自己的操作系統(tǒng)。執(zhí)行一個或多個虛擬機的軟件層被稱為虛擬機監(jiān)控程序或系統(tǒng)管理程序。系統(tǒng)管理程序可以在裸硬件(類型1或虛擬本機)上運行,或者在操作系統(tǒng)頂部(類型2或主存的虛擬機)運行。系統(tǒng)虛擬機的一些優(yōu)點有多個操作系統(tǒng)環(huán)境可以在同一臺計算機上共存,彼此強有力的隔離;虛擬機可以提供和真實機器的體系結構有些不同的指令集體系結構;且管理員可以通過在一個物理計算機系統(tǒng)上運行多個虛擬機來鞏固未充分利用的服務器。在服務器鞏固中經(jīng)常使用多個虛擬機,其中每個虛擬機運行其自身的操作系統(tǒng)(稱為客操作系統(tǒng)),在單獨機器上運行以避免干擾所使用的不同的服務改為在同一物理機器的分開的虛擬機中運行。運行多個操作系統(tǒng)允許在幾個單任務的操作系統(tǒng)間對單個計算機進行時間共享。 該技術包括用于在客操作系統(tǒng)和內(nèi)存虛擬化間共享CPU資源以共享主機上的內(nèi)存的CPU資源??筒僮飨到y(tǒng)不需要全部相同,因此可能在同一臺計算機上運行不同的操作系統(tǒng)(例如微軟Windows 和Linux、或較低版本的操作系統(tǒng)以便支持尚未被導至最新操作系統(tǒng)版本的軟件。)虛擬機支持不同的客操作系統(tǒng)的用途有時也用在嵌入式系統(tǒng)中。一種用途是在和像Linux或Window 這樣的高級操作系統(tǒng)同時支持實時操作系統(tǒng)。虛擬機的另一種用途是執(zhí)行在“沙箱”中未信任的操作系統(tǒng)。虛擬機也可以提供用于操作系統(tǒng)開發(fā)的其它優(yōu)點,包括改進的調(diào)試存取和較快的重新啟動。應用虛擬化是在應用層提供虛擬環(huán)境的技術。例如,主操作系統(tǒng)可以本機地運行一些應用,而同時提供運行其它應用(即,虛擬化的應用)的虛擬環(huán)境。和其中以允許運行操作系統(tǒng)的方式來對整個機器進行虛擬化的上述機器層的虛擬化不同,應用虛擬化提供了足以運行單個應用或多個應用的虛擬環(huán)境。這可以允許操作系統(tǒng),例如,運行內(nèi)在地彼此沖突的應用。應用虛擬化在主操作系統(tǒng)中本機運行的應用和在虛擬環(huán)境中運行的應用之間對用戶模糊區(qū)別。例如,兩類應用可以并排出現(xiàn)在操作系統(tǒng)外殼所提供的任務欄或菜單中。盡管虛擬化的應用對用戶來說看上去和本機應用類似,但是虛擬化的應用所預期或要求的資源可能未安裝在主操作系統(tǒng)上。例如,文件、注冊表項、配置設置和其它資源可能不可用,或者被存儲在和虛擬環(huán)境向應用呈現(xiàn)的位置所不同的位置中。在一些情況下,虛擬化的應用包括含有虛擬化應用所期望的資源的包或存檔格式的其它對象。可能難以確保應用能找到未本地安裝的資源,因此應用會正確地運行并且保持不察覺虛擬化環(huán)境。資源請求的類可以起源于在虛擬應用的進程內(nèi)被調(diào)用的操作系統(tǒng)代碼。這些請求可以被編組并且被提供給在虛擬環(huán)境之外的助手進程。該助手進程可以代表一個或多個虛擬進程向主操作系統(tǒng)作出請求。助手進程為了要正確地完成其工作,它可能需要存取虛擬環(huán)境所設立的位置中的資源。概述這里描述了虛擬化系統(tǒng),該系統(tǒng)便于虛擬化應用和主操作系統(tǒng)間的通信以允許應用正確地存取應用所引用的資源。當操作系統(tǒng)為虛擬化應用創(chuàng)建進程時,虛擬化系統(tǒng)用一個標識符來標注與該進程相關聯(lián)的數(shù)據(jù)結構,所述標識符標識了和該進程相關聯(lián)的虛擬應用環(huán)境。當操作系統(tǒng)組件通過助手進程代表虛擬進程作出請求時,接收請求的虛擬化驅動程序檢驗與該進程相關聯(lián)的數(shù)據(jù)結構以確定助手進程是否正在代表虛擬化的應用進程進行工作。在發(fā)現(xiàn)助手進程的線程正在代表虛擬進程進行工作之際,虛擬化驅動程序將助手進程的線程的請求指向到虛擬應用的資源,允許助手進程完成以正確數(shù)據(jù)請求的工作。因此,虛擬化系統(tǒng)便于對使用虛擬應用環(huán)境內(nèi)包含的資源(即,虛擬化資源)的應用進行應用虛擬化。提供本發(fā)明內(nèi)容以便以簡化形式介紹在以下具體實施方式
中進一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標識所要求保護主題的關鍵特征或必要特征,也不旨在用于限制所要求保護主題的范圍。
圖1是示出在一個實施例中的虛擬化系統(tǒng)的各組件的框圖。圖2是示出在一個實施例中與在主計算機上運行的進程相關聯(lián)的數(shù)據(jù)的數(shù)據(jù)結構圖。圖3是示出一個實施例中、系統(tǒng)用虛擬化信息來標注進程令牌的處理的流程圖。圖4是示出了一個實施例中、虛擬化系統(tǒng)響應于存取資源的請求的處理的流程圖。
具體實施例方式這里描述了虛擬化系統(tǒng),該系統(tǒng)便于虛擬化應用和主操作系統(tǒng)間的通信以允許應用正確地存取應用所引用的資源。在一些實施例中,虛擬化系統(tǒng)標注虛擬進程以標識該進程,使得主操作系統(tǒng)能正確地將任何助手進程請求指向到虛擬化的資源。當操作系統(tǒng)創(chuàng)建虛擬化的應用進程(例如,響應于用戶從操作系統(tǒng)外殼調(diào)用應用)時,虛擬化系統(tǒng)用一個標識符來標注與該進程相關聯(lián)的數(shù)據(jù)結構(例如令牌),該標識符標識了與該進程相關聯(lián)的虛擬應用環(huán)境。當操作系統(tǒng)組件(例如助手進程)代表始發(fā)的虛擬進程作出請求時,虛擬化驅動程序檢驗與正在執(zhí)行的線程相關聯(lián)的數(shù)據(jù)結構以確定助手進程的線程正在代表虛擬化應用進程進行工作。在發(fā)現(xiàn)線程正在進行虛擬進程工作之際,虛擬化驅動程序將助手進程的線程定向到虛擬應用的資源,允許助手進程完成以正確數(shù)據(jù)請求的工作。在一些實施例中,虛擬化系統(tǒng)在進程數(shù)據(jù)結構中選擇了由操作系統(tǒng)自動復制到模仿進程和子進程的字段,使得當助手進程代表虛擬化的應用進程進行工作時,助手進程的線程會用標識始發(fā)虛擬應用環(huán)境的標識符來標記。因此,虛擬化系統(tǒng)便于對使用虛擬化資源的應用進行應用虛擬化。操作系統(tǒng)具有控制對像文件這樣的資源的存取的安全性原理。例如,當使用 Microsoft Windows NT 時,令牌是每個進程所具有的安全性原理。當線程模仿除線程的進程的用戶以外的用戶時,線程也可以具有令牌。尤其是,令牌包括多個安全性標識符 (SID),安全性標識符標識了發(fā)起進程的用戶以及用戶所屬的組。安全性子系統(tǒng)使用SID 以及存取控制列表(ACL)來確定用戶是否有對特定資源(例如文件或注冊表項)的存取權利,存取控制列表描述了可以存取資源的用戶。例如,在缺省情況下,運行Microsoft Wind0WSTMEXpl0rerTM的非管理員用戶的令牌不具有附在該令牌上的正確SID以允許用戶對內(nèi)核操作系統(tǒng)文件c:\windows\system32\ntoskrnl. exe進行寫操作。UNIX具有類似的概念,稱為組標識(groupid)。應用虛擬化的一方面包括修改到操作系統(tǒng)的進程請求以便欺騙應用/進程認為該進程是本地安裝的,但實際上其數(shù)據(jù)和狀態(tài)位于分開的存儲中。例如,虛擬化應用可以包括存儲應用的數(shù)據(jù)的包或指定的目錄。在一些實施例中,虛擬化系統(tǒng)包括內(nèi)核模式驅動程序,該內(nèi)核模式驅動程序攔截諸如文件或注冊表開口的名字空間資源請求、并且修改請求以引用正確的位置(例如,在應用的分開的存儲中)。例如,一種類型的修改可以是將幵口從路徑 “C: \windows\winsxs\fiIedirl,,重定向至 “Q: \app\vfs\windows\winsxs\ filedirl”。通過將包含應用的數(shù)據(jù)的文件夾置于本地機器上,這樣做使應用能在不改變本地系統(tǒng)的同時找到其數(shù)據(jù)。特定請求未以清除格式進入內(nèi)核。這些請求使用本地過程調(diào)用(LPC)來將請求傳送至助手操作系統(tǒng)進程。這個的一個例子是Microsoft ffindows Side-By-Side (SxS)。通過使用&cS,始發(fā)進程打開來自并排匯編件高速緩存的匯編件的特定版本以便加載和執(zhí)行該匯編件的代碼,該匯編件可能包含許多版本。一般而言,應用的進程中的動態(tài)鏈接庫(DLL) (例如,kernel32. dll中的LoadLibrary)會使用LPC來調(diào)用到操作系統(tǒng)助手進程(例如, csrss. exe)中。被編組到助手進程中的數(shù)據(jù)部分是始發(fā)進程的令牌。在助手進程的線程中執(zhí)行的并排代碼使用令牌來模仿用戶進程,并且打開助手進程的自身處理的適當目錄。使用模仿確保了在代表應用作用時,助手進程的線程不具有除應用自身以外的進一步的安全性特權,使得系統(tǒng)保持安全。在一些實施例中,助手進程文件請求然后進入重定向過濾驅動程序。通常,重定向過濾驅動程序不能確定請求始發(fā)自哪個進程,因為它不能確認請求的始發(fā)進程??紤]用戶具有不止一個虛擬應用在運行的例子。在該情況下,一個虛擬應用可能在其虛擬名字空間中具有文件夾“c:\windows\winsxs\filedirl”,但另一個虛擬應用可能沒有文件夾。第一應用應當能看到文件夾,但是第二應用應當不能。這里描述的虛擬化系統(tǒng)通過添加附加數(shù)據(jù)來處理令牌(即,標注令牌)來解決該問題,該附加數(shù)據(jù)包括允許其它虛擬化組件識別和定位正確的虛擬應用環(huán)境和數(shù)據(jù)的標識符。通過能定位正確的虛擬應用環(huán)境,其它虛擬化組件可以使用正確的應用存儲位置來滿足資源請求(即,即使在請求中使用了不同的路徑,組件也知道在哪里獲得所請求的項)。 這允許應用以及操作系統(tǒng)助手進程來找到資源以正確地運行虛擬化應用。圖1是示出在一個實施例中的虛擬化系統(tǒng)的各組件的框圖。系統(tǒng)100包括應用虛擬化環(huán)境110、檢測進程創(chuàng)建組件120、令牌標注組件130、接收資源請求組件140、存取標注的令牌組件150和重定向資源請求組件160。這些組件中的每一個都在此處進一步詳細討論。應用虛擬化環(huán)境110提供了虛擬應用和主操作系統(tǒng)之間的間接級別。間接可能很難使應用近乎本機地運行,諸如當應用被設計成在主操作系統(tǒng)上運行(但可能在不同于常用位置的位置處存儲資源)時?;蛘呋蛄硗?,間接可以提供API,并且滿足為其它操作系統(tǒng)或操作系統(tǒng)版本設計的應用所預期的其它約束條件。因此,應用虛擬化環(huán)境110向虛擬應用提供這樣的環(huán)境,其中使用主操作系統(tǒng)的可用資源來為該環(huán)境設計應用。環(huán)境可以允許例如主操作系統(tǒng)來隔離易受病毒攻擊或者具有軟件缺陷的應用。當主操作系統(tǒng)創(chuàng)建新進程時,檢測進程創(chuàng)建組件120注冊通知并且接收通知。許多應用通過調(diào)用操作系統(tǒng)所提供的API以及與初始進程線程相關聯(lián)的數(shù)據(jù)來執(zhí)行,所述操作系統(tǒng)設立一環(huán)境。這種API —般調(diào)用到內(nèi)核模式中,以允許操作系統(tǒng)設立跟蹤與新進程相關聯(lián)的狀態(tài)和其它信息的數(shù)據(jù)結構。操作系統(tǒng)可以提供鉤住該進程的各個階段的API,使得所感興趣的組件可以在操作系統(tǒng)創(chuàng)建新進程時接收通知。檢測進程創(chuàng)建組件120注冊該通知,并且在創(chuàng)建新進程時被調(diào)用。組件120標識與新進程相關聯(lián)的令牌,如果進程與虛擬化應用相關聯(lián),則組件120調(diào)用令牌標注組件130來將附加信息添加至虛擬進程的令牌。令牌標注組件130向與虛擬進程相關聯(lián)的令牌添加一個或多個數(shù)據(jù)字段,這些數(shù)據(jù)字段將進程標識為虛擬進程并且將該進程與特定的虛擬環(huán)境相關聯(lián)。其它組件可以使用該信息作為進程執(zhí)行,以便對存取虛擬環(huán)境中存儲的數(shù)據(jù)的請求作出正確的響應。例如,系統(tǒng)100可以基于進程令牌、從虛擬環(huán)境而不是從與主操作系統(tǒng)相關聯(lián)的注冊表或文件存儲來存取注冊表項或文件。接收資源請求組件140從一個或多個應用接收對主操作系統(tǒng)所管理的資源進行存取的請求。資源可以包括文件、注冊表項等等。接收資源請求組件140可以包括用于接收或攔截來自應用的資源請求的用戶或內(nèi)核模式組件。組件140也可以從與主操作系統(tǒng)相關聯(lián)的其它應用(例如,助手進程)接收請求,所述其它應用代表包括虛擬應用在內(nèi)的多個應用進行操作。接收資源請求組件140調(diào)用存取標注的令牌組件150來確定進程屬于虛擬應用或者代表虛擬應用而操作,并且確定關于該應用的其它信息。例如,操作系統(tǒng)助手進程 (例如csrss. exe)的線程可以模仿調(diào)用它來執(zhí)行一個或多個資源請求的應用虛擬進程。存取標注的令牌組件150存取虛擬進程的令牌,并且讀取與虛擬化系統(tǒng)100相關聯(lián)的字段。例如,字段可以對應于令牌標注組件130所添加的字段。字段可以包括可用于標識始發(fā)虛擬進程所屬的虛擬環(huán)境的信息。重定向資源請求組件160接收從進程令牌存取的信息,并且將來自物理路徑的資源請求重定向至虛擬路徑。例如,虛擬應用可以嘗試使用典型的操作系統(tǒng)路徑c:\Wind0WS\ system32\foo. dll來存取文件,重定向資源請求組件可以將路徑改變到存儲應用的另一位置,諸如Q:\apps\vfs\system\foo. dll。操作系統(tǒng)提供了用于存取資源的API和其它設備, 諸如通過開式文件,但是虛擬化的應用可以包括要求操作系統(tǒng)在請求中嵌入的位置以外的位置存取資源。此外,虛擬化的應用可以包括附加步驟,諸如從打包格式解壓縮虛擬化的應用數(shù)據(jù)、或者將虛擬化的應用數(shù)據(jù)從遠程位置下載到本地主計算機。在一些實施例中,虛擬化系統(tǒng)的組件可以在操作系統(tǒng)驅動程序內(nèi)實現(xiàn)。例如,標注驅動程序可以包括檢測進程創(chuàng)建組件120和令牌標注組件130。舉另一個例子,重定向驅動程序可以包括接收資源請求組件140、存取標注的令牌組件150和重定向資源請求組件 160。由于操作系統(tǒng)內(nèi)的變化以及出于性能及其他原因,虛擬化系統(tǒng)可以用許多不同的方式實現(xiàn),具有與上述類似功能的組件。其上實現(xiàn)虛擬化系統(tǒng)的計算設備可包括中央處理單元、存儲器、輸入設備(例如, 鍵盤和定點設備)、輸出設備(例如,顯示設備)和存儲設備(例如,盤驅動器或其他非易失性存儲介質)。存儲器和存儲設備是可以用實現(xiàn)或啟用該系統(tǒng)的計算機可執(zhí)行指令(例如,軟件)來編碼的計算機可讀存儲介質。此外,數(shù)據(jù)結構和消息結構可被存儲或經(jīng)由諸如通信鏈路上的信號等數(shù)據(jù)傳送介質發(fā)送??梢允褂酶鞣N通信鏈路,諸如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)、點對點撥號連接、蜂窩電話網(wǎng)絡等。該系統(tǒng)的實施例可以在各種操作環(huán)境中實現(xiàn),這些操作環(huán)境包括個人計算機、月艮務器計算機、手持式或膝上型設備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費電子產(chǎn)品、數(shù)碼照相機、網(wǎng)絡PC、小型計算機、大型計算機、包括任何上述系統(tǒng)或設備中任一種的分布式計算環(huán)境等。計算機系統(tǒng)可以是蜂窩電話、個人數(shù)字助理、智能電話、個人計算機、可編程消費電子設備、數(shù)碼相機等。該系統(tǒng)可以在由一個或多個計算機或其他設備執(zhí)行的諸如程序模塊等計算機可執(zhí)行指令的通用上下文中描述。一般而言,程序模塊包括執(zhí)行特定任務或實現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結構等等。通常,程序模塊的功能可在各個實施例中按需進行組合或分布。圖2是示出在一個實施例中與在主計算機上運行的進程相關聯(lián)的數(shù)據(jù)的數(shù)據(jù)結構圖。典型的操作系統(tǒng)為操作系統(tǒng)管理的每個進程創(chuàng)建進程數(shù)據(jù)210。進程數(shù)據(jù)210包括存儲關于進程的狀態(tài)及其他信息的信息,諸如包含安全性信息的令牌220。操作系統(tǒng)可以在進程存續(xù)期內(nèi)的各個時刻存取令牌220,以便于存取資源并且保持主計算機的安全性。進程通常大量產(chǎn)生其它進程,令牌220包含一個復制部分230,始發(fā)進程所創(chuàng)建的子進程繼承該復制部分。此外,操作系統(tǒng)通常允許進程內(nèi)的線程來模仿一個特定用戶或其它線程,使得線程繼承被模仿實體的安全性和其它特征。模仿可以復制和子進程的繼承關系類似的復制部分230。復制部分230包括安全性信息M0,諸如與令牌相關聯(lián)的ACL和SID,安全性信息定義了令牌持有者的身份以及令牌持有者被允許存取的資源。虛擬化系統(tǒng)標注進程令牌以便將附加的虛擬化信息250包括在令牌的復制部分230內(nèi)。虛擬化信息250指定了有助于在主計算機的主操作系統(tǒng)上正確地標識虛擬環(huán)境的信息。由于虛擬化信息250在復制部分 230內(nèi),因此信息250對于子進程以及模仿始發(fā)進程的進程或線程來說是可用的。圖3是示出一個實施例中、虛擬化系統(tǒng)用虛擬化信息來標注進程令牌的處理的流程圖。每個進程具有一個令牌,當進程創(chuàng)建線程或另一進程時,該新的線程或進程繼承該令牌。在框310開始,虛擬化系統(tǒng)注冊操作系統(tǒng)提供的回叫,該回叫響應于操作系統(tǒng)創(chuàng)建進程來發(fā)布。例如,虛擬化系統(tǒng)可以調(diào)用操作系統(tǒng)所提供的API,虛擬化系統(tǒng)可以通過該API來注冊供操作系統(tǒng)調(diào)用的回叫功能。繼續(xù)到框320,虛擬化系統(tǒng)等待操作系統(tǒng)向虛擬化系統(tǒng)通知進程已被創(chuàng)建。繼續(xù)到框330中,虛擬化系統(tǒng)接收進程創(chuàng)建通知。例如,操作系統(tǒng)可以調(diào)用虛擬化系統(tǒng)所注冊的通知回叫功能,并且向新進程提供句柄、進程標識符(PID)或其他信息。繼續(xù)到框340,虛擬化系統(tǒng)標識新進程的應用環(huán)境。虛擬化系統(tǒng)確定該進程是否是虛擬化的應用進程。例如,編組服務或僅僅應用的映像位置可以向虛擬化系統(tǒng)通知進程是虛擬化的應用進程。繼續(xù)到框350,虛擬化系統(tǒng)創(chuàng)建定制SID、標識符或其他形式的標注。例如,令牌可以包括一列SID或與該進程相關聯(lián)的其他安全性信息,虛擬化系統(tǒng)可以創(chuàng)建定制SID,而不是用戶將進程標識為特定虛擬環(huán)境內(nèi)的虛擬化應用進程。繼續(xù)到框360中,虛擬化系統(tǒng)將標注存儲在進程令牌中。例如,系統(tǒng)可以將定制SID添加至與進程令牌相關聯(lián)的SID列表。由于操作系統(tǒng)在進程創(chuàng)建新線程或進程時自動地復制進程令牌的復制部分,位于其中的信息會轉發(fā)至虛擬化應用進程的孩子進程或模仿者。在框360之后,這些步驟結束。在虛擬進程運行時,進程可以執(zhí)行不透明-LPC請求。虛擬進程打包數(shù)據(jù)以傳送至助手進程,包括進程或線程的令牌,并且將數(shù)據(jù)發(fā)送至助手進程。助手進程可以是具有對系統(tǒng)上大多數(shù)資源的存取的受信任操作系統(tǒng)進程。為了防止用戶進程的資源請求損害系統(tǒng), 助手進程在存取資源之前模仿始發(fā)進程令牌。模仿產(chǎn)生了新的有效線程令牌,該新的有效線程令牌包括和從傳入的始發(fā)進程令牌復制的標識符相同的定制SID或其他形式的標識符。圖4是示出了一個實施例中、虛擬化系統(tǒng)響應于存取資源的請求的處理的流程圖。在框410開始,虛擬化系統(tǒng)接收資源存取請求。例如,應用可以調(diào)用操作系統(tǒng)所提供的文件開式API,并且指定到應用請求打開的文件的路徑。操作系統(tǒng)可以將控制從API傳送至內(nèi)核模式,其中操作系統(tǒng)內(nèi)核和過濾驅動程序接收該請求。例如,操作系統(tǒng)可以包括一重定向驅動程序,該重定向驅動程序被設計成修改來自虛擬化應用的請求中的路徑,以指向正確的虛擬化資源存儲位置。繼續(xù)框420,虛擬化系統(tǒng)從請求自其接收到的進程提取令牌。例如,操作系統(tǒng)可以提供用于存取令牌的數(shù)據(jù)字段的API,或者數(shù)據(jù)字段可以被存儲在令牌內(nèi)的虛擬化系統(tǒng)能直接定位和存取的公知數(shù)據(jù)結構中。繼續(xù)到框430,虛擬化系統(tǒng)確定令牌的所提取的數(shù)據(jù)字段是否表明虛擬進程。例如,系統(tǒng)可以查找參照圖3的步驟創(chuàng)建的定制SID或其他形式的標注信息。繼續(xù)到判決框440,如果虛擬化系統(tǒng)確定進程是虛擬進程,則系統(tǒng)繼續(xù)到框450, 否則,系統(tǒng)完成,并且允許操作系統(tǒng)以正常方式響應于資源請求。繼續(xù)到框450,虛擬化系統(tǒng)標識與虛擬進程相關聯(lián)的虛擬應用環(huán)境。例如,系統(tǒng)可以查詢標注驅動程序以確定從進程令牌提取的定制SID與哪個虛擬進程相關聯(lián)。繼續(xù)到框 460,虛擬化系統(tǒng)將請求重定向至所標識的虛擬應用環(huán)境。例如,重定向驅動程序可以從標注驅動程序接收標識虛擬應用環(huán)境的信息。重定向驅動程序修改接收到的請求以指向與虛擬應用相關聯(lián)的資源。例如,重定向驅動程序可以用與虛擬應用相關聯(lián)的文件路徑來修改接收到的請求中所包含的文件路徑。繼續(xù)到框470中,操作系統(tǒng)通過提供對所請求的資源的存取來響應于重定向的資源請求。例如,操作系統(tǒng)可以打開所標識的文件并且響應于請求來提供文件數(shù)據(jù)。應用就像數(shù)據(jù)還在應用正常存儲它的位置處那樣進行操作,虛擬化系統(tǒng)修改請求以指向到數(shù)據(jù)被實際存儲的位置。由于虛擬化系統(tǒng)所執(zhí)行的令牌標注,因此無論資源請求是來自應用、代表應用操作的助手進程、還是其他源,應用虛擬化都能正確地進行。在框470之后,這些步驟結束。在一些實施例中,虛擬化系統(tǒng)以打包文件格式來存儲應用數(shù)據(jù)。打包文件可以是能存儲多個其他文件和數(shù)據(jù)類型的任何文件格式。例如,常見的現(xiàn)有打包文件格式包括 ZIP、CAB、RAR、SFT及其他類似的格式。除了允許以一個存檔格式來存儲多個文件以外,打包文件通常包括用于減小文件尺寸和其他特征(例如加密)的壓縮。虛擬化應用的打包文件可以包括由虛擬應用所使用的注冊表單元、文件、數(shù)據(jù)庫和其他類型的數(shù)據(jù)。操作系統(tǒng)可以安裝像目錄、卷、盤驅動器和其他資源這樣的打包文件,使得虛擬應用可以用文件和其他資源操縱的常見操作系統(tǒng)API來引用打包文件內(nèi)存儲的項。在一些實施例中,虛擬化系統(tǒng)可以包括在虛擬引用的可執(zhí)行文件中的虛擬應用數(shù)據(jù),使得應用可以作為具有自提取數(shù)據(jù)的單個EXE文件而被分布。盡管這里描述了幾個例子,但是虛擬化系統(tǒng)不限于任何存儲應用數(shù)據(jù)的特定方式,可以使用除上述以外的存儲機制。在一些實施例中,虛擬化系統(tǒng)提供內(nèi)核模式組件來修改操作系統(tǒng)行為。應用虛擬化處的過去嘗試通常包括用戶模式的掛鉤和攔截技術,該技術在檢測虛擬應用可能嘗試的所有動作時的成功性受到限制。虛擬化系統(tǒng)可以包括這里進一步描述的內(nèi)核模式驅動程序,它使系統(tǒng)能通過虛擬進程或代表虛擬進程更全面地檢測動作,并且更有效地修改這些動作。例如,檢測到這里所述的標注令牌的內(nèi)核模式重定向驅動程序可以更容易地檢測到資源請求與特定虛擬環(huán)境相關聯(lián)(甚至在虛擬進程以外的進程作出時),并且可以修改資源請求中的路徑以便在虛擬資源的正確位置指向這些虛擬資源。內(nèi)核模式操作提供了跨進程的活動的檢測,并且通常比包括多次用戶到內(nèi)核模式轉換的用戶模式修改更有效。從前面的描述中可以看出,可以理解,此處描述的虛擬化系統(tǒng)的特定實施例只是為了說明,但是,在不偏離本發(fā)明的精神和范圍的情況下,可以進行各種修改。例如,虛擬進程可以包括通常在計算機系統(tǒng)上運行的任何類型的應用。許多情況下,應用不察覺到它正在以虛擬化的方式運行。管理員可以有虛擬地運行應用的許多原因,包括安全性隔離、清晰的數(shù)據(jù)分割、允許復雜的應用在像USB驅動這樣的有限空間內(nèi)運行,等等。因此,本發(fā)明只受所附權利要求限制。
權利要求
1.一種用于代表虛擬化的應用進程來處理資源請求的計算機實現(xiàn)的方法,所述方法包括從正在執(zhí)行的進程接收(410)資源存取請求; 從正在執(zhí)行的進程提取(420)進程信息;確定(430)所提取的進程信息是否表明正在執(zhí)行的進程與虛擬應用進程相關聯(lián);以及響應于(440)確定正在執(zhí)行的進程與虛擬應用進程相關聯(lián), 標識(450)虛擬應用進程在其中操作的虛擬應用環(huán)境; 將接收到的請求重定向(460)到所標識的虛擬應用環(huán)境;以及通過提供對所請求的資源的存取來響應于(470)被重定向的資源請求, 其中,前面的各步驟由至少一個處理器來執(zhí)行。
2.如權利要求1所述的方法,其特征在于,所述正在執(zhí)行的進程代表虛擬化的應用進程來操作。
3.如權利要求1所述的方法,其特征在于,所述正在執(zhí)行的進程模仿虛擬化的應用進程并且復制來自與虛擬化的應用進程相關聯(lián)的令牌的信息。
4.如權利要求1所述的方法,其特征在于,接收到的請求指定路徑,重定向請求包括 修改所指定的路徑以便引用一個位置,其中與虛擬化的應用進程相關聯(lián)的所請求的資源被存儲在該位置。
5.如權利要求1所述的方法,其特征在于,接收資源存取請求包括調(diào)用內(nèi)核模式重定向驅動程序,所述內(nèi)核模式重定向驅動程序被配置成確定請求是否源自于虛擬應用進程, 如果是,則修改來自虛擬化應用的請求中的路徑以便指向正確的資源存儲位置。
6.如權利要求1所述的方法,其特征在于,所述進程信息包括含有與正在執(zhí)行的進程相關的安全性信息在內(nèi)的令牌。
7.如權利要求1所述的方法,其特征在于,確定所提取的進程信息是否表明虛擬進程包括標識存儲在進程信息內(nèi)的一種形式的標注。
8.如權利要求1所述的方法,其特征在于,標識與虛擬進程相關聯(lián)的虛擬應用環(huán)境包括查詢標注驅動程序以確定與提取自正在執(zhí)行的進程的進程信息相關聯(lián)的虛擬進程。
9.如權利要求1所述的方法,其特征在于,自其接收到請求的正在執(zhí)行的進程是代表單獨的虛擬進程而操作的助手進程。
10.如權利要求1所述的方法,其特征在于,將接收到的請求重定向至所標識的虛擬應用環(huán)境包括調(diào)用重定向驅動程序以修改接收到的請求以指向與虛擬應用相關聯(lián)的資源。
11.如權利要求1所述的方法,其特征在于,響應于被重定向的資源請求包括打開所標識的文件并且響應于請求而提供文件數(shù)據(jù)。
12.一種用于在主操作系統(tǒng)內(nèi)執(zhí)行虛擬應用的計算機系統(tǒng),所述計算機系統(tǒng)包括至少一個處理器和存儲器,所述存儲器包括其上存儲的軟件指令,所述軟件指令在由至少一個處理器執(zhí)行時使所述至少一個處理器實現(xiàn)各組件,所述組件包括應用虛擬化環(huán)境110,其被配置成虛擬應用和主操作系統(tǒng)之間的至少一些間接; 檢測進程創(chuàng)建組件120,其被配置成注冊通知并且響應于主操作系統(tǒng)創(chuàng)建新進程而接收通知;令牌標注組件130,其被配置成向與虛擬進程相關聯(lián)的令牌添加一個或多個數(shù)據(jù)字段,這些數(shù)據(jù)字段將進程標識為虛擬進程并且將該進程與特定的虛擬環(huán)境相關聯(lián);接收資源請求組件140,其被配置成從一個或多個應用接收對主操作系統(tǒng)所管理的資源進行存取的請求;存取標注的令牌組件150,其被配置成存取執(zhí)行環(huán)境的令牌并且讀取令牌標注組件所添加的字段以標識虛擬化信息;以及重定向資源請求組件160,其被配置成接收從令牌存取的虛擬化信息,并且將資源請求從指定的位置重定向至虛擬位置。
13.如權利要求12所述的系統(tǒng),其特征在于,所述檢測進程創(chuàng)建組件還被配置成標識與新進程相關聯(lián)的令牌,如果進程與虛擬應用環(huán)境相關聯(lián),則調(diào)用令牌標注組件來向虛擬進程令牌添加附加信息。
14.如權利要求12所述的系統(tǒng),其特征在于,所述令牌標注組件還被配置成向令牌的由主操作系統(tǒng)自動復制到虛擬進程的相關進程的一部分添加一個或多個字段。
15.如權利要求12所述的系統(tǒng),其特征在于,所述接收資源請求組件還被配置成從代表另一應用操作的一個或多個助手應用接收存取主操作系統(tǒng)所管理的資源的請求。
全文摘要
這里描述了虛擬化系統(tǒng),該系統(tǒng)便于虛擬化應用和主操作系統(tǒng)間的通信以允許應用正確地存取應用所引用的資源。當操作系統(tǒng)創(chuàng)建虛擬化的應用進程時,虛擬化系統(tǒng)用一個標識符來標注與該進程相關聯(lián)的數(shù)據(jù)結構,所述標識符標識了和該進程相關聯(lián)的虛擬化應用環(huán)境。當操作系統(tǒng)組件代表始發(fā)的虛擬進程作出請求時,虛擬化驅動程序檢驗與該線程相關聯(lián)的數(shù)據(jù)結構以確定助手進程正在代表虛擬化應用進程進行工作。在發(fā)現(xiàn)線程正在進行虛擬進程工作之際,虛擬化驅動程序將助手進程的線程定向到虛擬應用的資源,允許助手進程以正確數(shù)據(jù)完成請求的工作。
文檔編號G06F9/44GK102460382SQ201080027468
公開日2012年5月16日 申請日期2010年6月10日 優(yōu)先權日2009年6月15日
發(fā)明者J·M·希恩, 李暉 申請人:微軟公司