两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

合并的注冊表項中的虛擬刪除的制作方法

文檔序號:6456406閱讀:287來源:國知局
專利名稱:合并的注冊表項中的虛擬刪除的制作方法
合并的注冊表項中的虛擬刪除
站旦冃豕
注冊表是在包括微軟WINDOWS 9x、 WINDOWS CE、 WINDOWS NT、WINDOWS 2000和WINDOWS XP在內(nèi)的某些操作系統(tǒng)中使用的中央分層數(shù)據(jù)庫。注冊表用于存儲針對一個或多個用戶、應(yīng)用程序和硬件設(shè)備來配置系統(tǒng)所需的信息。注冊表包括WINDOWS在操作期間不斷引用的信息,諸如每一個用戶的簡檔、安裝在計算機(jī)上的應(yīng)用程序、每一個應(yīng)用程序可創(chuàng)建的文檔類型、文件夾和應(yīng)用程序圖標(biāo)的屬性頁設(shè)置、系統(tǒng)上存在什么硬件、正在使用的端口等。有時期望呈現(xiàn)由兩個或多個實際項構(gòu)成的注冊表項的邏輯視圖。
有時也期望允許對于注冊表目錄的不同部分的不同訪問級別。例如,可能期望允許應(yīng)用程序A刪除特定注冊表項但不允許應(yīng)用程序B刪除該注冊表項,或允許應(yīng)用程序A對于特定項添加其自己的值。本發(fā)明的各實施例解決了這些和其他需求。
概述
兩組或多組單獨的實際注冊表項作為單個(虛擬)注冊表呈現(xiàn)給在被稱為豎井(silo)的受控執(zhí)行環(huán)境中運行的應(yīng)用程序。通??捎糜趯ψ员碇械捻椇晚椫祱?zhí)行的所有操作都可對合并的注冊表執(zhí)行,然而,操作系統(tǒng)控制對合并的注冊表中的項的訪問級別。操作系統(tǒng)通過注冊表過濾器驅(qū)動程序或其他內(nèi)核級操作系統(tǒng)代碼來提供注冊表的合并視圖。注冊表過濾器模型為單個回調(diào)提供指示調(diào)用該回調(diào)的原因的通知碼?;卣{(diào)處理程序可被實現(xiàn)為具有用于處理各種通知的代碼的大型開關(guān)語句。觸發(fā)特殊處理的逋知類型的示例包括枚舉子項、枚舉項值、査詢項、查詢值、設(shè)置項值、修改項的安全性、加載項、關(guān)閉項、創(chuàng)建或打開項、刪除項、刪除值或重命名項。
對注冊表項或值的虛擬刪除的需求在包括以下條件在內(nèi)的各種情形中可能變成必要的或期望的
做出刪除注冊表項或值的請求的用戶基于與該項/值相關(guān)聯(lián)的ACL- (訪問控制列表)具有刪除該項或值的許可。 . 合并項的專用構(gòu)成位置經(jīng)由其訪問掩碼具有刪除許可。
對于接收到對其的刪除請求的合并項啟用刪除語義支持。 當(dāng)滿足所有以上條件時,可在專用位置中為正被虛擬地刪除的注冊表項或 值創(chuàng)建刪除標(biāo)記。從豎井的觀點來看,所標(biāo)記的注冊表項或值已被刪除。因此, 在請求特定類型的注冊表項/值訪問操作時可能需要特殊的虛擬刪除處理。觸發(fā) 特殊虛擬刪除處理的請求類型的示例包括枚舉、打開、創(chuàng)建、重命名、刪除項 以及刪除值。
附圖簡述 在附圖中


圖1是示出其中可以實現(xiàn)本發(fā)明各方面的示例性計算環(huán)境的框圖2是根據(jù)本發(fā)明的某些實施例的用于合并注冊表項或值的系統(tǒng)的框圖3是根據(jù)本發(fā)明的某些實施例的用于合并注冊表項或值的方法的流程
圖4是根據(jù)本發(fā)明的某些實施例的圖3的方法的一部分的流程圖; 圖5是根據(jù)本發(fā)明的某些實施例的對于打開/創(chuàng)建請求的虛擬刪除處理的 流程圖6是根據(jù)本發(fā)明的某些實施例的對于枚舉請求的虛擬刪除處理的流程
圖7是根據(jù)本發(fā)明的某些實施例的對于刪除請求的虛擬刪除處理的流程
圖8是根據(jù)本發(fā)明的某些實施例的對于查詢的虛擬刪除處理的流程圖。
詳細(xì)描述 概覽
有時期望呈現(xiàn)由兩個或多個實際項構(gòu)成的注冊表項的邏輯視圖。例如,可 能期望提供現(xiàn)有注冊表項和新的空項之間的合并。由一進(jìn)程創(chuàng)建新注冊表項和 值將進(jìn)入最初空的項,但來自現(xiàn)有注冊表的所有狀態(tài)將對于該進(jìn)程可見。這允許進(jìn)程存儲其單獨項中的"專用"改變,但不修改注冊表的共享的"公共"部 分。然而,通常當(dāng)前已知的操作系統(tǒng)向所有進(jìn)程提供注冊表項的相同視圖。
因此,在許多系統(tǒng)中,在操作系統(tǒng)進(jìn)程層以及操作系統(tǒng)本身的機(jī)器邊界處 存在系統(tǒng)中有限的密封點,但在這些層之間,使用諸如訪問控制列表(ACL) 以及與運行應(yīng)用程序的用戶的身份相關(guān)聯(lián)的特權(quán)等安全控制來控制對注冊表 項或值的進(jìn)程訪問。因為對系統(tǒng)資源的訪問與運行應(yīng)用程序的用戶的身份而不 是與應(yīng)用程序本身相關(guān)聯(lián),所以應(yīng)用程序可訪問該應(yīng)用程序不需要的注冊表項 或值,如以上示例所展示的。因為多個應(yīng)用程序可能能夠修改同一個注冊表項 或值,所以可能導(dǎo)致應(yīng)用程序之間的不兼容。也可能產(chǎn)生安全問題,因為一個 應(yīng)用程序可能惡意或故意干擾另一應(yīng)用程序的操作。
此處被稱為豎井的操作系統(tǒng)內(nèi)隔離/密封機(jī)制允許對在使用操作系統(tǒng)的單 個實例的單個計算機(jī)上運行的進(jìn)程進(jìn)行分組和隔離。操作系統(tǒng)的單個實例將系
統(tǒng)的處理空間分為多個并排和/或嵌套的執(zhí)行環(huán)境(豎井),從而允許對某些注 冊表項的受控共享以及對其他項的訪問限制。操作系統(tǒng)通過為每一個豎井創(chuàng)建 不同的注冊表視圖來控制注冊表項共享和訪問。該視圖對于在豎井中運行的進(jìn) 程表現(xiàn)為單個目錄,該單個目錄是兩組或多組構(gòu)成項的并集。即,對于應(yīng)用程 序可用的項取決于該應(yīng)用程序在哪個豎井中運行并且在一豎井中運行的應(yīng)用 程序"看見"的注冊表通過表面上合并兩組或多組項來創(chuàng)建。服務(wù)于計算機(jī)或計 算機(jī)系統(tǒng)的單個OS映像由此提供注冊表的不同視圖以控制哪個進(jìn)程、進(jìn)程組、 應(yīng)用程序或應(yīng)用程序組可使用哪些項以及應(yīng)用程序是否能夠讀取或讀寫項。對 項的訪問以及對項的訪問程度因此直接關(guān)聯(lián)于或基于進(jìn)程、應(yīng)用程序、進(jìn)程組、 應(yīng)用程序組被放置的豎井而不是僅由用戶特權(quán)來確定。
對注冊表的合并支持可經(jīng)由注冊表過濾器驅(qū)動程序或其他內(nèi)核級操作系 統(tǒng)代碼來實現(xiàn)。在某些實施例中注冊表過濾器模型為單個回調(diào)提供指示調(diào)用該 回調(diào)的原因的通知碼。在某些實施例中回調(diào)處理程序因此是具有用于處理各種 通知的代碼的大型開關(guān)語句。接收特殊處理的通知包括枚舉注冊表項、枚舉注 冊表項的值、査詢關(guān)于注冊表項的信息、查詢值、設(shè)置項值、修改項的安全性、 加載項、關(guān)閉項、創(chuàng)建項、重命名項以及刪除項或刪除項值。創(chuàng)建項通知在調(diào) 用者想要創(chuàng)建或打開注冊表項時接收。驅(qū)動程序檢查正被訪問的項的名稱并確定是否需要特殊處理。如果發(fā)出請求的進(jìn)程不在豎井中,則無需特殊處理。如 果發(fā)出請求的進(jìn)程在豎井中,則檢索發(fā)出該請求的豎井的合并項元數(shù)據(jù)。如果 正被訪問的項名在合并項中,則執(zhí)行特殊處理。如果在專用位置處存在項(豎 井專用的注冊表項),則在轉(zhuǎn)發(fā)該請求時使用該專用位置。如果在專用位置處 不存在項,則檢查公共位置來尋找該項。如果在公共位置處存在項(全局注冊 表項),則在轉(zhuǎn)發(fā)該請求時使用該公共位置。如果在公共或?qū)S梦恢锰幉淮嬖?項,則返回信息以使得或者可返回錯誤(即,指示無法打開不存在的項的錯誤) 或者可創(chuàng)建該項。如果正被訪問的項名不在合并項中,則不執(zhí)行特殊處理。如
果執(zhí)行特殊處理,則將元數(shù)據(jù)與該項相關(guān)聯(lián)。
如果元數(shù)據(jù)在創(chuàng)建項操作期間與請求相關(guān)聯(lián)并且打開該項的請求是成功-的,則將該元數(shù)據(jù)附加到該項。當(dāng)項被關(guān)閉時,刪除與該項相關(guān)聯(lián)的任何元數(shù) 據(jù)。當(dāng)客戶機(jī)應(yīng)用程序試圖枚舉打開的項的子項值時,調(diào)用特殊處理程序。檢 索與該項相關(guān)聯(lián)的任何元數(shù)據(jù)。如果找到元數(shù)據(jù),并且該元數(shù)據(jù)指示該項是合
并項,則將存在于每一個構(gòu)成項中的項列表的內(nèi)容返回給調(diào)用者。
在某些實施例中用于查詢項的注冊表API通過傳入索引并返回結(jié)果來實 現(xiàn)。對于給定索引,考慮構(gòu)成項的內(nèi)容,確定對于該索引應(yīng)返回什么,并返回 該內(nèi)容。跟蹤枚舉期間的每一個構(gòu)成目錄中的當(dāng)前位置,并且每次都返回適當(dāng) 的下一個值。即,返回來自一個構(gòu)成項的所有結(jié)果。在還未枚舉相同的項名的 情況下返回后續(xù)項的結(jié)果。如果調(diào)用者査看當(dāng)前索引之下的索引,則重置內(nèi)部 高速緩存的索引并重啟處理??擅杜e項中的子項或項中的值。子項或值如所請 求地返回給調(diào)用者。如果接收到請求項名的請求,則返回相對于豎井的名稱而 不是注冊表中的項的實際名稱。因此,如果接收到檢索項信息的請求,則檢索 該信息并更新所請求的信息以使其匹配調(diào)用者期望的信息。例如,假設(shè)請求項 的名稱。檢索該項的名稱并更新發(fā)回到調(diào)用者的名稱以使其匹配調(diào)用者慣用于 打開該項的名稱,從而保持構(gòu)成項的所有內(nèi)容都在同一個合并項中的錯覺。如 果正在重命名項,則基于展示給應(yīng)用程序的"合并"目錄視圖來確認(rèn)新名稱或新 位置。由此,如果用戶想要將項移至新位置,則基于命名空間的豎井視圖來更 新該新位置。
當(dāng)兩個或多個實際注冊表項經(jīng)由一個邏輯視圖來展示時,刪除項或值可展示或顯示其他構(gòu)成項組之一中具有與所刪除的項/值相同的名稱的項或值。通常 在合并項情況下,對各組構(gòu)成項排序。當(dāng)發(fā)生沖突(即,在兩個或多個構(gòu)成項 中存在具有相同名稱的值)時,排序策略確定將展示哪個值。然而,如果排名
最高的項已被刪除,則將在沒有干預(yù)(absent intervention)的情況下展示來自 其他(下一個排名最高的)構(gòu)成項的具有相同名稱的值。該項的展示可能不是 合乎需要的。因此,需要"記住"在構(gòu)成項中存在過具有相同名稱的項或值并 防止在同名的排名更高的項已被刪除時展示該值。
例如,假設(shè)相同的項同時出現(xiàn)在合并的注冊表的公共部分和專用部分兩者 中。通常,在展示合并項時,注冊表目錄的專用目錄、位置或部分是允許寫入 的而公共部分是只讀的。這兩個部分構(gòu)成邏輯項視圖。新的項和值以及可能被 修改的值(經(jīng)由例如寫時復(fù)制(copy-on-write))被寫入到專用位置。因此專 用項中所創(chuàng)建的值將屏蔽一個或多個公共項中具有相同名稱的值。但是,如果 專用項中的值被刪除,則可展示或顯示公共值中的一個。對于先前訪問專用注 冊表項值的應(yīng)用程序而言,該專用值將不會看上去已被刪除。該應(yīng)用程序現(xiàn)在 將訪問先前隱藏但現(xiàn)在改為展示的注冊表值,其就該應(yīng)用程序所知道的而言是 同一個值,但該先前隱藏的注冊表項的內(nèi)容很可能是不同的。此外,刪除注冊 表值的進(jìn)一步嘗試將失敗,因為現(xiàn)在正被打開的值處于只讀位置中。這是成問 題的。
為了解決這些問題,根據(jù)本發(fā)明的實施例,在專用項中添加標(biāo)記以指示所 標(biāo)記的注冊表項或值將被認(rèn)為是"已刪除"并且因此應(yīng)該不再經(jīng)由邏輯合并項 視圖可見。因此,在本發(fā)明的實施例中,為刪除標(biāo)記提供存儲并且在注冊表項 或值訪問操作期間創(chuàng)建并遵循刪除標(biāo)記。存儲刪除標(biāo)記需要用于刪除信息的某 一種持久存儲。因此,刪除數(shù)據(jù)可指示所刪除的注冊表項或值、位置或子位置 的名稱以及該注冊表項或值、位置或子位置被刪除的位置。這些目標(biāo)可通過存 儲標(biāo)識刪除的注冊表項或值的特殊注冊表項或值、存儲諸如刪除的注冊表項或 值的重解析點等另一注冊表標(biāo)記、將數(shù)據(jù)存儲在外部(單獨的)存儲中來實現(xiàn)。
在某些WINDOWS操作系統(tǒng)中,注冊表是事務(wù)型的(transactional),這 意味著多個注冊表操作可作為一組來一起完成。當(dāng)已完成所有操作時,可或者 提交或者中止改變。因此或者所有改變都出現(xiàn),或者沒有一個改變出現(xiàn)。因此,在本發(fā)明的某些實施例中,如果刪除標(biāo)記作為事務(wù)的一部分來創(chuàng)建,則刪除標(biāo) 記直到提交事務(wù)才出現(xiàn),并且如果事務(wù)被中止,則刪除標(biāo)記也消失。
在從合并項中刪除注冊表項或值時需要創(chuàng)建刪除標(biāo)記。在接收到對于先前 從合并位置中刪除的注冊表項或值的打開注冊表項或值的請求、接收到對于先 前從合并位置中刪除的注冊表項或值的枚舉注冊表項或值的請求、接收到對于 先前從合并位置中刪除的注冊表項或值的創(chuàng)建注冊表項或值的請求等時需要 遵循刪除標(biāo)記。
在本發(fā)明的某些實施例中,當(dāng)注冊表項或值被刪除時,具有相同名稱的注 冊表項或值將不會再次從除了合并項的專用部分之外的構(gòu)成位置中展示。在這 種情況下,如果來自構(gòu)成(公共)位置的具有相同名稱的注冊表項或值隨后開 始存在,則該注冊表項或值將不會在該合并項中可見。在本發(fā)明的某些實施例 中,標(biāo)記只在合并項的公共部分中存在與正被刪除的注冊表項或值同名的注冊 表項或值的情況下才創(chuàng)建。在這種情況下,刪除專用注冊表項或值否則將導(dǎo)致 展示或顯示同名的公共注冊表項或值。如果同名的注冊表項或值隨后開始存 在,則該注冊表項或值將會在合并項中可見。
示例性計算環(huán)境
圖1及以下討論旨在提供可在其中實現(xiàn)本發(fā)明的合適計算環(huán)境的簡要概 括描述。然而,應(yīng)當(dāng)理解,構(gòu)想了所有種類的手持式、便攜式和其它計算設(shè)備 來結(jié)合本發(fā)明使用。盡管以下描述了通用計算機(jī),但是這僅是一個示例,并且 本發(fā)明只需具有網(wǎng)絡(luò)服務(wù)器互操作性和交互的瘦客戶機(jī)。由此,本發(fā)明可在其 中蘊含了極少或最小客戶機(jī)資源的聯(lián)網(wǎng)的主存服務(wù)的環(huán)境,例如其中客戶機(jī)設(shè) 備僅用作瀏覽器或到萬維網(wǎng)的接口的聯(lián)網(wǎng)環(huán)境中實現(xiàn)。
盡管并非所需,但本發(fā)明可經(jīng)由開發(fā)者使用的,和/或包括在網(wǎng)絡(luò)瀏覽軟 件中的應(yīng)用程序編程接口 (API)來實現(xiàn),該網(wǎng)絡(luò)瀏覽軟件將在諸如程序模塊 等由諸如客戶機(jī)工作站、服務(wù)器或其它設(shè)備等一個或多個計算機(jī)執(zhí)行的計算機(jī) 可執(zhí)行指令的一般上下文中描述。 一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)?現(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模 塊的功能可以在各個實施例中按需進(jìn)行組合或分布。此外,本領(lǐng)域的技術(shù)人員 可以理解,本發(fā)明可以用其它計算機(jī)系統(tǒng)配置來實施。適用于本發(fā)明的其它眾所周知的計算系統(tǒng)、環(huán)境和/或配置包括但不限于,個人計算機(jī)(PC)、自動 柜員機(jī)、服務(wù)器計算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理器 的系統(tǒng)、可編程消費者電子設(shè)備、網(wǎng)絡(luò)PC、小型計算機(jī)、大型計算機(jī)等等。 本發(fā)明也可以在其中任務(wù)由通過通信網(wǎng)絡(luò)鏈接或其它數(shù)據(jù)傳輸介質(zhì)的遠(yuǎn)程處 理設(shè)備來執(zhí)行的分布式計算環(huán)境中實踐。在分布式計算環(huán)境中,程序模塊可以 位于包括存儲器存儲設(shè)備在內(nèi)的本地和遠(yuǎn)程計算機(jī)存儲介質(zhì)中。
因此,圖1示出了其中可實現(xiàn)本發(fā)明的合適的計算系統(tǒng)環(huán)境100的一個示 例,盡管如上所述,計算系統(tǒng)環(huán)境100僅為合適的計算環(huán)境的一個示例,并非
對本發(fā)明的使用范圍或功能提出任何局限。也不應(yīng)該把計算環(huán)境IOO解釋為對 示例性操作環(huán)境100中示出的任一組件或其組合有任何依賴性或要求。
參考圖1,用于實現(xiàn)本發(fā)明的示例性系統(tǒng)包括計算機(jī)iio形式的通用計算
設(shè)備。計算機(jī)110的組件可以包括,但不限于,處理單元120、系統(tǒng)存儲器130 和將包括系統(tǒng)存儲器在內(nèi)的各種系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線 121。系統(tǒng)總線121可以是幾種類型的總線結(jié)構(gòu)中的任何一種,包括存儲器總 線或存儲控制器、外圍總線、以及使用各種總線體系結(jié)構(gòu)中的任一種的局部總 線。作為示例,而非限制,這樣的體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總 線、微通道體系結(jié)構(gòu)(MCA)總線、增強型ISA (EISA)總線、視頻電子技 術(shù)標(biāo)準(zhǔn)協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也稱為夾層 (Mezzanine)總線)。
計算機(jī)110通常包括各種計算機(jī)可讀介質(zhì)。計算機(jī)可讀介質(zhì)可以是能由計 算機(jī)IIO訪問的任何可用介質(zhì),而且包含易失性、非易失性介質(zhì)以及可移動和 不可移動介質(zhì)。作為示例而非局限,計算機(jī)可讀介質(zhì)可以包括計算機(jī)存儲介質(zhì) 和通信介質(zhì)。計算機(jī)存儲介質(zhì)包括以用于存儲諸如計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、 程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實現(xiàn)的易失性和非易失性、可移 動和不可移動介質(zhì)。計算機(jī)存儲介質(zhì)包括但不限于,RAM、 ROM、 EEPROM、 閃存或其它存儲器技術(shù)、CDROM、數(shù)字多功能盤(DVD)或其它光盤存儲、 磁盒、磁帶、磁盤存儲或其它磁存儲設(shè)備、或可以用來儲存所期望的信息并可 由計算機(jī)110訪問的任一其它介質(zhì)。通信介質(zhì)通常以諸如載波或其它傳輸機(jī)制 等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并包括任意信息傳送介質(zhì)。術(shù)語"已調(diào)制數(shù)據(jù)信號"指的是其一個或多個特征以 在信號中編碼信息的方式被設(shè)定或更改的信號。作為示例而非限制,通信介質(zhì) 包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無線介質(zhì),諸如聲學(xué)、RF、 紅外線和其它無線介質(zhì)。以上的任何組合也應(yīng)包括在計算機(jī)可讀介質(zhì)的范圍 內(nèi)。
系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機(jī)存儲介質(zhì),
如只讀存儲器(ROM) 131和隨機(jī)存取存儲器(RAM) 132?;据斎?輸出系 統(tǒng)133 (BIOS)包括如在啟動時幫助在計算機(jī)110內(nèi)的元件之間傳輸信息的基 本例程,它通常儲存在ROM131中。RAM132通常包含處理單元120可以立 即訪問和/或目前正在其上操作的數(shù)據(jù)和/或程序模塊。作為示例而非局限,圖 l示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。
計算機(jī)110也可以包括其它可移動/不可移動、易失性/非易失性計算機(jī)存 儲介質(zhì)。僅作為示例,圖l示出了對不可移動、非易失性磁介質(zhì)進(jìn)行讀寫的硬 盤驅(qū)動器141,對可移動、非易失性磁盤152進(jìn)行讀寫的磁盤驅(qū)動器151,以 及對諸如CD ROM或其它光學(xué)介質(zhì)等可移動、非易失性光盤156進(jìn)行讀寫的 光盤驅(qū)動器155??梢栽谑纠圆僮鳝h(huán)境中使用的其它可移動/不可移動、易失 性/非易失性計算機(jī)存儲介質(zhì)包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、 數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動器141通常由不可移動 存儲器接口,諸如接口 140連接至系統(tǒng)總線121,磁盤驅(qū)動器151和光盤驅(qū)動 器155通常由可移動存儲器接口,諸如接口 150連接至系統(tǒng)總線121。
上文討論并在圖1中示出的驅(qū)動器及其關(guān)聯(lián)的計算機(jī)存儲介質(zhì)為計算機(jī) 110提供了計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲。在圖1 中,例如,硬盤驅(qū)動器141被示為存儲操作系統(tǒng)144、應(yīng)用程序145、其它程 序模塊146和程序數(shù)據(jù)147。注意,這些組件可以與操作系統(tǒng)134、應(yīng)用程序 135、其它程序模塊136和程序數(shù)據(jù)137相同,也可以與它們不同。操作系統(tǒng) 144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147在這里被標(biāo)注了不同的 標(biāo)號是為了說明至少它們是不同的副本。用戶可以通過輸入設(shè)備,諸如鍵盤162 和定點設(shè)備161 (通常指鼠標(biāo)、跟蹤球或觸摸墊)向計算機(jī)110輸入命令和信 息。其它輸入設(shè)備(未示出)可以包括話筒、操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設(shè)備通常由耦合至系統(tǒng)總線121的用戶輸入 接口 160連接到處理單元120,但是也可由諸如并行端口、游戲端口或通用串
行總線(USB)之類的其它接口和總線結(jié)構(gòu)連接。
監(jiān)視器191或其它類型的顯示設(shè)備也經(jīng)由接口,諸如視頻接口 190連接至 系統(tǒng)總線121。諸如北橋等圖形接口 182也可連接到系統(tǒng)總線121。北橋是與 CPU或主機(jī)處理單元120通信的芯片組,并承擔(dān)了加速圖形端口 (AGP)通信 的責(zé)任。 一個或多個圖形處理單元(GPU) 184可以與圖形接口 182通信。在 這一點上,GPU 184—般包括諸如寄存器存儲等片上存儲器存儲,并且GPU 184 與視頻存儲器186通信。然而,GPU184僅是協(xié)處理器的一個示例,且因此計 算機(jī)110中可包括各種協(xié)處理設(shè)備。監(jiān)視器191或其它類型的顯示設(shè)備也通過 接口,如視頻接口 190連接至系統(tǒng)總線121,而視頻接口 l卯又與視頻存儲器 186通信。除監(jiān)視器191之外,計算機(jī)也可包括其它外圍輸出設(shè)備,如揚聲器 197和打印機(jī)196,它們通過輸出外圍接口 195連接。
計算機(jī)110可使用至一個或多個遠(yuǎn)程計算機(jī),如遠(yuǎn)程計算機(jī)180的邏輯連 接在網(wǎng)絡(luò)化環(huán)境中操作。遠(yuǎn)程計算機(jī)180可以是個人計算機(jī)、服務(wù)器、路由器、 網(wǎng)絡(luò)PC、對等設(shè)備或其它常見的網(wǎng)絡(luò)節(jié)點,并且通常包括許多或所有以上相 對于計算機(jī)IIO所描述的元件,盡管在圖1中僅示出了存儲器存儲設(shè)備181。 圖1中所示的邏輯連接包括局域網(wǎng)(LAN) 171和廣域網(wǎng)(WAN) 173,但也 可以包括其它網(wǎng)絡(luò)。這樣的聯(lián)網(wǎng)環(huán)i在辦公室、企業(yè)范圍計算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng) 和因特網(wǎng)中是常見的。
當(dāng)在LAN聯(lián)網(wǎng)環(huán)境中使用時,計算機(jī)110通過網(wǎng)絡(luò)接口或適配器170連 接至LAN171。當(dāng)在WAN聯(lián)網(wǎng)環(huán)境中使用時,計算機(jī)110通常包括調(diào)制解調(diào) 器172或用于通過諸如因特網(wǎng)等WAN 173建立通信的其它裝置。調(diào)制解調(diào)器 172可以是內(nèi)置或外置的,它可以通過用戶輸入接口 160或其它適當(dāng)?shù)臋C(jī)制連 接至系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對于計算機(jī)UO所描述的程序模塊或 其部分可被儲存在遠(yuǎn)程存儲器存儲設(shè)備中。作為示例而非局限,圖l示出遠(yuǎn)程 應(yīng)用程序185駐留在存儲器設(shè)備181上??梢岳斫?,所示的網(wǎng)絡(luò)連接是示例性 的,且可以使用在計算機(jī)之間建立通信鏈路的其它手段。
本領(lǐng)域的普通技術(shù)人員可以理解,計算機(jī)110或其它客戶機(jī)設(shè)備可作為計算機(jī)網(wǎng)絡(luò)的一部分來部署。在這一點上,本發(fā)明涉及具有任意數(shù)量的存儲器或 存儲單元以及在任意數(shù)量的存儲單元或巻上發(fā)生的任意數(shù)量的應(yīng)用程序和進(jìn)
程的任何計算機(jī)系統(tǒng)。本發(fā)明可應(yīng)用于具有部署在網(wǎng)絡(luò)環(huán)境中的具有遠(yuǎn)程或本 地存儲的服務(wù)器計算機(jī)和客戶計算機(jī)的環(huán)境。本發(fā)明也可應(yīng)用于具有編程語言 功能、解釋和執(zhí)行能力的獨立計算設(shè)備。 合并的注冊表項或值中的虛擬刪除
操作系統(tǒng)監(jiān)視由在豎井中運行的進(jìn)程做出的注冊表訪問請求(例如,
WINDOWS注冊表)。在計算機(jī)或計算機(jī)系統(tǒng)中可同時存在多個豎井。多個進(jìn)
程可在每一個豎井中執(zhí)行。單個操作系統(tǒng)映像創(chuàng)建豎井并創(chuàng)建和監(jiān)視所有豎井 中的所有進(jìn)程。注冊表項的豎井專用視圖由操作系統(tǒng)通過在表面上將兩個或多
個實際后臺(backing)存儲(注冊表項) 一起合并為對于豎井看上去是單個項 的樣子來創(chuàng)建。即,兩個或多個單獨的注冊表項可作為單個項展示給豎井(以 及在該豎井中運行的進(jìn)程)。可使用這些實際后臺存儲中的一個或多個來為這 些豎井中的一個或多個構(gòu)建豎井專用視圖的一部分。
圖2示出了用于如上所述的合并的注冊表中的注冊表項或值的虛擬刪除 的系統(tǒng)200的一個實施例。系統(tǒng)200可駐留在一臺或多臺計算機(jī)上,諸如以上 參考圖1所述的計算機(jī)110。在圖2中, 一個或多個執(zhí)行環(huán)境可在計算機(jī)110 上運行。所構(gòu)想的一種類型的執(zhí)行環(huán)境是豎井(以上已更詳細(xì)地描述)。在圖 2中,描繪了豎井202和豎井220。豎井可以是嵌套的,即,豎井202自身可 包括豎井(未示出)。豎井可被嵌套成任何所需層次。另一豎井內(nèi)所嵌套的豎 井有時被稱為子豎井,而其中嵌套豎井的豎井有時被稱為其父豎井。父豎井可 控制其資源(包括注冊表項或值在內(nèi))對于其子豎井可用的程度。
豎井可用于創(chuàng)建隔離的執(zhí)行環(huán)境以使得與一個豎井相關(guān)聯(lián)的資源對于在 該豎井中運行的進(jìn)程可用而不可由在計算機(jī)或計算機(jī)系統(tǒng)或計算機(jī)網(wǎng)絡(luò)中的 其他計算機(jī)上運行的其他豎井來訪問。例如,如果豎井202是隔離的執(zhí)行環(huán)境, 則對于在豎井202中運行的進(jìn)程216可用的資源(未示出)將對于諸如在第二 豎井,目卩,豎井220中運行的諸如進(jìn)程226等進(jìn)程不可用。然而,在豎井202 中運行的第二進(jìn)程(諸如進(jìn)程217)可訪問該資源。類似地,對于進(jìn)程226和 227可用的資源對于在豎井202中運行的資源216和217不可用?;蛘?,根據(jù)本發(fā)明的實施例,豎井可用于創(chuàng)建半隔離的或受控的執(zhí)行環(huán)境, 其中某些資源是共享的而某些資源不是共享的,或者其中資源的某些部分是共 享的而該資源的其他部分不是共享的。這樣一個構(gòu)想到的資源是注冊表。例如,
在豎井202中諸如進(jìn)程216和217等一個或多個進(jìn)程正在運行并可訪問注冊表。 在本發(fā)明的某些實施例中,注冊表是虛擬合并的項目錄212,其中盡管對于進(jìn) 程216和217而言作為單個實際目錄出現(xiàn),但虛擬合并注冊表212實際上是操 作系統(tǒng)通過使用回調(diào)在特定情況下對特定類型的操作執(zhí)行特殊處理而創(chuàng)建的 兩組或多組注冊表項的并集的虛擬視圖。由操作系統(tǒng)214創(chuàng)建的視圖可包括被 合并在一起以創(chuàng)建虛擬合并注冊表的注冊表的公共項和專用或本地(對于豎井 而言)項的并集。在本發(fā)明的某些實施例中,折疊重復(fù)項,且在存在重復(fù)項時 使用專用項的值。例如,公共注冊表中的一個項是VegistryXmachineXsoftware。 該項例如可以是應(yīng)用程序可寫入機(jī)器全局狀態(tài)的位置。期望允許在豎井中運行 的應(yīng)用程序?qū)⑵渥约旱臓顟B(tài)寫入其自己的VegistoAmachineXsoftware的副本 (艮卩,\registry\machine\silo0000software ) 但使得該豎井能夠在 Vegistry、machine、software的公共版本中共享該狀態(tài)。以此方式,該豎井能夠看 見在外部系統(tǒng)中做出的任何改變但能夠做出其自己的改變或?qū)懭雽⒅淮嬖谟?其專用位置中并且由此將不會影響處于該豎井外部的系統(tǒng)的新項。因此,合并 注冊表項\registry\machine\software禾口 \registry\machine\silo0000software 。豎井 將看見被稱為\registry\machine\software的項但其內(nèi)容將會是實際的 \registry\machine\software禾口 registry\machine\silo0000software的組合。因lt匕, 在本發(fā)明的某些實施例中由操作系統(tǒng)創(chuàng)建的合并注冊表包括全局項的值,而該 項的專用、非共享部分與特桌豎井相關(guān)聯(lián)(例如,與豎井202相關(guān)聯(lián)),并且 可表示例如,在該豎井中運行的應(yīng)用程序的本地或?qū)S庙?。例如,在圖2中, 與豎井202相關(guān)聯(lián)的虛擬合并項212包括從全局項204的值導(dǎo)出的可共享部分 204a以及從本地項(與豎井202相關(guān)聯(lián)的專用、非共享項206)的值導(dǎo)出的不 可共享(專用)部分206a。與豎井220相關(guān)聯(lián)的虛擬合并注冊表232包括從全 局項204的值導(dǎo)出的可共享部分204a以及從本地項(與豎井220相關(guān)聯(lián)的專 用、非共享項203)的值導(dǎo)出的不可共享部分236a。在本發(fā)明的某些實施例中, 項212的可共享部分204a是只讀的,而項212的專用、非共享部分206a是讀寫的,但可以理解,所構(gòu)想的本發(fā)明并不限于此。即,虛擬合并注冊表項的專 用部分可以是只讀的或讀寫的或者可包括只讀或讀寫的部分。類似地,虛擬合 并注冊表項的可共享部分可以是只讀的或讀寫的或者可包括僅僅只讀的或讀 寫的部分。此外,可以理解,所構(gòu)想的本發(fā)明并不限于合并兩個值或兩組項。 可合并任何數(shù)量的項(n個項)以創(chuàng)建虛擬合并注冊表。虛擬合并注冊表在本 發(fā)明的某些實施例中并非持久存儲在永久存儲上或本質(zhì)上在存儲器中創(chuàng)建,而
是由操作系統(tǒng)214通過監(jiān)視注冊表項訪問請求并如以下更詳細(xì)描述地執(zhí)行與訪
問請求的類型相關(guān)聯(lián)的特殊處理來按需動態(tài)推導(dǎo)出。
因此,可以理解,因為在計算機(jī)上或計算機(jī)系統(tǒng)中可能同時存在不止一個 豎井,所以也可能同時存在不止一個注冊表視圖,即,在豎井和虡擬合并注冊 表之間存在一對一的對應(yīng)關(guān)系,但在特定計算機(jī)或計算機(jī)系統(tǒng)上在任一時刻可 能存在任何數(shù)量的豎井及合并視圖。此外,虛擬合并注冊表中的每一項的一部 分可包括可共享部分,其對于計算機(jī)系統(tǒng)中的所有豎井而言可以是相同的或不
相同的,并且可以與實際后臺注冊表204相同或不相同。在本發(fā)明的某些實施 例中,在系統(tǒng)中的所有豎井中運行的所有應(yīng)用程序或進(jìn)程共享豎井的合并注冊 表的單個可共享部分,其可能存在或不存在于豎井在其上運行的特定計算機(jī) 上。此外,作為合并注冊表的可共享或不可共享部分的"后臺"的實際目錄可 存在于諸如可移動盤、CDROM、 USB鑰匙等可移動介質(zhì)上。類似地,實際后 臺注冊表可駐留在遠(yuǎn)程系統(tǒng)上。對于合并注冊表的專用或不可共享部分及其后 臺存儲而言亦是如此。
在本發(fā)明的某些實施例中,操作系統(tǒng)214中創(chuàng)建注冊表的合并視圖(例如, 合并項212和232)的機(jī)制是過濾器驅(qū)動程序,其能夠通過注冊回調(diào)來將其自 身插入到操作的代碼路徑中。在本發(fā)明的某些實施例中,所注冊的回調(diào)包括 RegNtPreCreateKeyEx(Ex), RegNtPostCreateKeyEx(Ex) 、 RegNtPreQueryKey 、 RegNtPreEnumerateKey 、 RegNtPreEnumerateValueKey 、 RegNtPreRenameKey 和RegNtPreKeyHandleClose,但可以理解,可注冊其他回調(diào)。在本發(fā)明的某些 實施例中,對其執(zhí)行特殊處理(例如,經(jīng)由回調(diào))的操作是對注冊表項的枚舉、 打開、創(chuàng)建、重命名和關(guān)閉操作。例如,枚舉操作可以與RegNtPreEnumerateKey 和 RegNtPreEnumerateValueKey 回調(diào)相關(guān)聯(lián),打開和倉'J建與RegNtPreCreateKeyEx(Ex) 、 RegNtPostCreateKeyEx(Ex)相關(guān).聯(lián),關(guān)閉與 RegNtPreKeyHandleClose回調(diào)相關(guān)聯(lián),而重命名與RegNtPreRenameKey回調(diào)
相關(guān)聯(lián)。在某些實施例中,當(dāng)注冊表項訪問請求從進(jìn)程發(fā)出時,操作系統(tǒng)經(jīng)由 回調(diào)來監(jiān)視該請求并且如果操作是對于其將發(fā)生特殊處理的操作中的一個,則 執(zhí)行特殊處理。例如,在圖2中,操作系統(tǒng)214可監(jiān)視諸如由豎井202中的進(jìn) 程216發(fā)起的請求240等注冊表項訪問請求并執(zhí)行特殊處理以便從專用項206 (與豎井202相關(guān)聯(lián))和公共項204中創(chuàng)建虛擬合并注冊表212。虛擬合并注 冊表212中從專用項206導(dǎo)出的項的各部分由(虛擬的)專用項206a來表示, 而虛擬合并注冊表212中從公共項204導(dǎo)出的各部分由(虛擬的)公共項204a 來表示。
每一個構(gòu)成(后臺存儲)項都可以與一排名相關(guān)聯(lián)(例如,在圖2中,專 用(后臺存儲)項206與排名210相關(guān)聯(lián)、公共項(后臺存儲)204與排名208 相關(guān)聯(lián))。在某些實施例中排名在需要時用作平局打破器(tiebreaker)。例如, 如果請求項訪問(例如,打開、枚舉等),并且所指示的值存在于兩組同名項 中,則可使用構(gòu)成組的排名來確定向請求者展示哪個值,即,向請求者展示具 有最高排名的項組中項的值(作為示例,項的可寫入部分)。類似地,如果給 定名稱是一個構(gòu)成目錄中的項并且相同的名稱是另一組構(gòu)成項中的子目錄,則 在某些實施例中向請求者展示具有最高排名的組中的條目。
例如,在某些實施例中注冊表項枚舉是來自所有構(gòu)成項組的所有項的并 集。如果在不止一個構(gòu)成組中存在相同的名稱,則使用每一構(gòu)成組的排名來確 定應(yīng)展示哪個組的版本的值。在創(chuàng)建項時,如果該項還未存在于任一構(gòu)成組中, 則它將在具有最高排名的組中創(chuàng)建。在重命名項時,查詢每一構(gòu)成項組以確定 新名稱尚未被使用,并且如果未被使用,則將該項重命名為該新名稱。
在本發(fā)明的某些實施例中,當(dāng)對于注冊表項或值的虛擬刪除的需求變成必 要的或期望的時候,注冊表項或值(位于合并項的專用部分中)用刪除標(biāo)記來 標(biāo)記而不是實際上被刪除。從豎井的觀點來看,如此標(biāo)記的注冊表項或值已被 刪除。
為了解決以上需求,將刪除標(biāo)記與在合并項環(huán)境中接收到對于其的刪除請 求的注冊表項或值相關(guān)聯(lián)。在展示合并項時,通常將存在可寫入的合并項的專用部分以及只讀的公共部分(由一個或多個公共位置構(gòu)成)。專用位置和公共 位置或目錄兩者構(gòu)成邏輯合并項。新注冊表項或值以及可能可修改的注冊表項 或值(經(jīng)由寫時復(fù)制操作)通常進(jìn)入合并項的專用部分。合并項的公共部分中 的注冊表項或值通常是可見的但是不可修改的。專用位置中所創(chuàng)建的具有與構(gòu) 成公共位置或目錄中的一個或多個注冊表項或值相同的名稱的注冊表項或值 通常將屏蔽或隱藏公共注冊表項或值,因為專用注冊表項或值的排名高于類似 命名的公共注冊表項或值。但如果排名最高的專用注冊表項或值被刪除,則可 顯示或展示公共注冊表項或值中的一個,因為現(xiàn)在公共注冊表項或值是該名稱 的排名最高的注冊表項或值。對于先前訪問過專用注冊表項或值的應(yīng)用程序而 言,該專用注冊表項或值將不會看上去已被刪除。先前已訪問過專用注冊表項 或值的應(yīng)用程序現(xiàn)在可訪問先前隱藏但現(xiàn)在改為展示的注冊表項或值,其據(jù)該 應(yīng)用程序所知是同一個注冊表項或值,但該先前隱藏的注冊表項或值的內(nèi)容很 可能是不同的。此外,刪除注冊表項或值的進(jìn)一步嘗試將失敗,因為現(xiàn)在正被 打開的注冊表項或值處于只讀位置中。這是成問題的。為了解決這些問題,將 標(biāo)記添加到專用位置以指示所標(biāo)記的注冊表項或值將被認(rèn)為是"已刪除的"并 因此應(yīng)當(dāng)不再經(jīng)由邏輯合并項視圖可見。因此,在本發(fā)明的實施例中,提供用 于刪除標(biāo)記的存儲并且在注冊表項或值訪問操作期間創(chuàng)建并遵循刪除標(biāo)記。存 儲刪除標(biāo)記需要用于刪除信息的某一種持久存儲。構(gòu)想用于存儲刪除標(biāo)記的多 個選項。 一個選項是裝飾所刪除的注冊表項或值的名稱以指示刪除。例如,如
果注冊表值"ABC"被刪除,則可將具有名稱'^deletedSS:ABC"的新的值寫入到 專用位置中的注冊表目錄。即,刪除標(biāo)記可通過創(chuàng)建具有從正被刪除的項或值 的名稱導(dǎo)出的經(jīng)裝飾的名稱的新的項或值來創(chuàng)建并可被寫入到注冊表的專用 部分。適當(dāng)?shù)难b飾或消息的存在指示虛擬地刪除的注冊表項或值。顯而易見的 是,任何類型的裝飾或消息都可指示虛擬刪除所示裝飾僅僅是一種可能的裝 飾的示例。另一選項是將刪除標(biāo)記作為重解析點來存儲。另一選項是將刪除標(biāo) 記存儲在外部數(shù) 據(jù)庫中。例如,諸如注冊表項或值的名稱、經(jīng)裝飾的名稱或重 解析點等刪除標(biāo)記可被存儲在注冊表項或值系統(tǒng)中的另一位置中(或許被存儲 在被稱為"刪除的注冊表項或值"的注冊表項或值、位置或子位置中)或者刪除 標(biāo)記可被存儲在另一非注冊表項或值系統(tǒng)存儲中。在這種情況下,將存儲刪除的注冊表項或值的名稱,而不是存儲經(jīng)裝飾的名稱以指示虛擬地刪除的注冊表 項或值,從而需要查找操作以確定給定注冊表項或值是否已被虛擬地刪除。因 此,刪除數(shù)據(jù)可指示所刪除的注冊表項或值的名稱以及該注冊表項或值被刪除 的位置。這些目標(biāo)可通過存儲標(biāo)識刪除的注冊表項或值的刪除標(biāo)記、存儲諸如 刪除的注冊表項或值的重解析點等另一注冊表標(biāo)記、或?qū)h除數(shù)據(jù)存儲在外部 (單獨的)存儲中來實現(xiàn)。因為刪除可在事務(wù)中發(fā)生,所以所使用的任何實現(xiàn) 都應(yīng)當(dāng)是知曉事務(wù)的。將數(shù)據(jù)存儲在外部存儲中要求該外部存儲可參與事務(wù), 這意味著該外部存儲將知道事務(wù)何時被提交,并且將在提交期間提交結(jié)果。類 似地,如果事務(wù)被中止,則該外部存儲將回退(或撤銷)改變。該外部存儲還 必需在事務(wù)中提供動作已經(jīng)發(fā)生的視圖,但在該事務(wù)之外使得看上去像該動作 還未發(fā)生。
在從合并項中刪除注冊表項或值時需要創(chuàng)建刪除標(biāo)記。在接收到對于先前 從合并位置中刪除的注冊表項或值的打開注冊表項或值的請求、接收到對于先. 前從合并位置中刪除的注冊表項或值的枚舉注冊表項或值的請求、接收到對于 先前從合并位置中刪除的注冊表項或值的創(chuàng)建注冊表項或值的請求等時需要 遵循刪除標(biāo)記。
在本發(fā)明的某些實施例中,當(dāng)注冊表項或值被刪除時,具有相同名稱的注 冊表項或值將不會再次從除了合并項的專用位置之外的構(gòu)成位置中展示。在這 種情況下,如果來自構(gòu)成(公共)位置的具有相同名稱的注冊表項或值隨后開 始存在,則該注冊表項或值將不會在該合并項中可見。在本發(fā)明的某些實施例 中,標(biāo)記只在合并項的公共部分中存在與正被刪除的注冊表項或值同名的注冊 表項或值的情況下才創(chuàng)建。在這種情況下,刪除專用注冊表項或值否則將導(dǎo)致 展示或顯示同名的公共注冊表項或值。如果同名的注冊表項或值隨后開始存 在,則該注冊表項或值將會在合并項中可見。
在本發(fā)明的某些實施例中,操作系統(tǒng)的過濾器驅(qū)動程序掛鉤各種注冊表項 或值訪問操作并且與上述合并項操作協(xié)同展示用于虛擬地刪除的注冊表項或 值的正確語義。例如,對于諸如枚舉操作等操作而言刪除標(biāo)記本身是被隱藏的, 并且已經(jīng)被虛擬地刪除的任何注冊表項或值都是被隱藏的。即,可過濾掉刪除 標(biāo)記以使得在接收到枚舉請求時不返回刪除標(biāo)記。類似地,對其存在刪除標(biāo)記的注冊表項或值不響應(yīng)于枚舉請求來返回。對于諸如創(chuàng)建或打開等操作而言防 止調(diào)用者打開刪除標(biāo)記或虛擬地刪除的注冊表項或值。在合并項環(huán)境中,在接 收到打開或創(chuàng)建操作請求時提供邏輯以確定是否試圖打開合并項的專用或公 共部分中的注冊表項或值。如果打開操作中所指定的注冊表項或值處于公共部 分中,則執(zhí)行檢査以確定在專用位置中是否存在對于該注冊表項或值的刪除標(biāo) 記。如果存在,則打開失敗(例如,返回"未找到狀態(tài)對象名")。不允許打開 刪除標(biāo)記形式的注冊表項或值。對于重命名操作而言,將注冊表項或值重命名 為刪除標(biāo)記形式的名稱是不被準(zhǔn)許的。對于刪除操作而言,在合并項的專用部 分中為注冊表項或值創(chuàng)建刪除標(biāo)記。在某些實施例中刪除標(biāo)記通過創(chuàng)建具有注 冊表項或值名稱的經(jīng)裝飾的版本的新注冊表項或值來創(chuàng)建。項或值名稱的經(jīng)裝 飾的版本將要刪除的原始項或名稱用作基礎(chǔ)并對其添加前綴或后綴或兩者以 創(chuàng)建經(jīng)裝飾的版本。經(jīng)裝飾的注冊表項或值的存在指示該項或值已被虛擬地刪 除。傳統(tǒng)上,項在可被刪除之前必須是空的。在項虛擬刪除的情況下,在本發(fā) 明的某些實施例中,創(chuàng)建對于項的刪除標(biāo)記、刪除嵌套的刪除標(biāo)記并且然后如 果適當(dāng)則執(zhí)行普通刪除處理。(例如,刪除可在項從專用位置打開的情況下發(fā) 生。)也可查詢項。査詢的結(jié)果可包括諸如子項和值的數(shù)量等信息。在某些實 施例中,過濾查詢操作以更新子項/值計數(shù)以及最大子項長度和最大值名稱長度 字段。 ^
圖3是根據(jù)本發(fā)明的實施例的用于合并項的方法的流程圖。在302,操作
系統(tǒng)(例如,圖2的OS 214)監(jiān)視注冊表項訪問請求(諸如由在豎井202中運 行的進(jìn)程216做出的訪問請求240)。當(dāng)操作系統(tǒng)檢測到(例如,經(jīng)由回調(diào)) 項訪問請求(304)時,操作系統(tǒng)214確定所做出的訪問請求的類型(306、 314、 322、 326、 330和334)并執(zhí)行適當(dāng)?shù)奶幚恚鐚⒃谝韵赂敿?xì)地描述的。
例如,在306,操作系統(tǒng)可確定項訪問請求是打開或創(chuàng)建項的操作(306)。 圖4是可在隨后發(fā)生的處理(308)的流程圖。當(dāng)打開或創(chuàng)建請求被發(fā)送到其 上存在合并注冊表的巻時,調(diào)用使得操作系統(tǒng)的過濾器驅(qū)動程序能夠檢查該請 求以確定是否需要特殊處理的創(chuàng)建回調(diào)(例如,RegNtPreCreateKeyEx(Ex))。 在調(diào)用打開或創(chuàng)建操作時,提供絕對路徑名或相對于現(xiàn)有打開的項的路徑名。 在使用相對打開時,名稱解析開始于相對句柄所引用的注冊表節(jié)點。在絕對打開的情況下,操作系統(tǒng)的10管理器解析名稱,對象管理器解析名稱中指向設(shè)
備對象的一部分并將該名稱的未解析余額(balance)(尚未被解析的部分)連 同指向其所處的設(shè)備對象的指針一起傳回到i/o管理器。當(dāng)所指的項的一部分
是豎井視圖(402)而不是全局部分時需要特殊處理。如此處所使用的,"使 用豎井視圖"來執(zhí)行操作意味著項的名稱在豎井的虛擬合并注冊表中而不是在 注冊表的普通的實際視圖中解釋。
在402,如果打開是絕對打開(不是相對打開)并且調(diào)用者處于豎井中, 則處理在404處繼續(xù)。在本發(fā)明的某些實施例中,操作系統(tǒng)通過觀察訪問請求 中的若干字段來確定打開或創(chuàng)建項是相對還是絕對打開/創(chuàng)建。如果訪問請求僅 包括項名并且發(fā)起該請求的線程不屬于在豎井中運行的進(jìn)程,則該請求被認(rèn)為 是絕對打開??墒褂谜埱笾兴鎯Φ男畔頇z索與項相關(guān)聯(lián)的元數(shù)據(jù)(408)。
由此,在404,在豎井的上下文中檢查正被訪問的項的名稱。新的項對象 使用豎井視圖來創(chuàng)建,只要請求中所引用的項最初在豎井中打開。因為過濾了 對項對象的所有訪問請求,所以可訪問兩個或多個后臺對象以提供豎井視圖。 項也使用豎井視圖來打開,只要使用相對打開而不是絕對打開。在本發(fā)明的某 些實施例中,如果請求中表示現(xiàn)有打開的項的字段不為空,則該請求被認(rèn)為是 相對請求。在402,如果調(diào)用者不在豎井中或如果原始項不在豎井中打開,則 處理照常進(jìn)行(406)。如果請求使用絕對名稱(即,項的名稱使用路徑名來 顯式引用并且請求的打開項字段為空),則操作系統(tǒng)確定發(fā)起請求的進(jìn)程(調(diào) 用者)是否處于豎井中。在本發(fā)明的某些實施例中,操作系統(tǒng)通過確定發(fā)起訪 問請求的線程是否處于豎井中來確定調(diào)用者是否處于豎井中。或者,在某些實 施例中操作系統(tǒng)可通過檢查可用豎井標(biāo)識符來標(biāo)記的訪問請求以確定該請求 是否源自豎井中的調(diào)用者來確定調(diào)用者是否處于豎井中。如果調(diào)用者處于豎井 中,則項使用豎井視圖來打開并返回專用值。.
因此,如果請求中所引用的項最初不是在豎井中打開的,或如果請求是絕 對打開并且調(diào)用者不在豎井中,則處理在406處繼續(xù)。在404,如果操作將使 用豎井視圖來處理,則檢査請求中的項的名稱并在豎井的上下文中解釋該項的 名稱。在本發(fā)明的某些實施例中,為豎井提供具有與底層機(jī)器相同的分層結(jié)構(gòu) 的注冊表的視圖(即,豎井的視圖看上去具有與基礎(chǔ)結(jié)構(gòu)或"系統(tǒng)豎井"相同的分層結(jié)構(gòu))。例如,如果在基礎(chǔ)結(jié)構(gòu)中存在VegistryXmachine^oftware,則在豎 井中展示Vegistry、machine、software。這可完成以使得期望該分層結(jié)構(gòu)的應(yīng)用程 序?qū)⒄业剿?。然而,可改變作為該分層結(jié)構(gòu)的后臺的項以使得豎井中的 \registry\machine\software 實際上是實際的\registry\machine\software 禾口 \registry\machine\silo000software (豎井專用注冊表)的合并。發(fā)生普通出錯處 理。即,例如在打開操作中,如果搜索由訪問請求中的名稱來標(biāo)識的項但在任 一目標(biāo)項中都未找到,則返回出錯消息。如果在適當(dāng)?shù)捻椫姓业阶禹?,則將打 開的項返回給調(diào)用者??稍诖蜷_的項被返回給調(diào)用者之前附加元數(shù)據(jù)以便成功 地打開或創(chuàng)建。如果未找到項,則創(chuàng)建項或返回出錯消息。在408,檢索豎井 的合并注冊表項元數(shù)據(jù)。在410,如果未在合并注冊表中找到所請求的名稱, 則處理照常進(jìn)行(406)。例如,可返回陳述未找到項的出錯消息。在410,如 果在合并注冊表視圖中未找到所請求的名稱,則返回信息以使得能夠確定是否 要創(chuàng)建或打開該名稱的項(412)。在某些操作系統(tǒng)中,可使用"創(chuàng)建操作"來 同時打開和創(chuàng)建項。在416,如果所請求的操作是"打開項"(即,該請求試圖 訪問現(xiàn)有項),則操作系統(tǒng)通過確定在合并注冊表的專用(不可共享)部分中 是否存在該項來首先檢查專用構(gòu)成項。在416,如果操作系統(tǒng)確定在虛擬合并 注冊表的專用部分中不存在該項,則檢查合并注冊表的公共部分。如果在合并 注冊表的公共部分中不存在該項,則返回出錯消息。如果在合并注冊表中找到 該項,則返回打開的項。在412,如果確定將要創(chuàng)建項(即,請求是創(chuàng)建項請 求),則在414,操作系統(tǒng)檢查公共位置以確保在合并注冊表的公共部分中尚 不存在該項。如果存在,則導(dǎo)致出錯(418)。如果不存在,則在合并注冊表 的專用部分中創(chuàng)建項,將元數(shù)據(jù)與該項相關(guān)聯(lián)并將所創(chuàng)建的項連同該元數(shù)據(jù)一 起返回給調(diào)用者(420)。
在本發(fā)明的某些實施例中,元數(shù)據(jù)將在RegNtPrePostCreate期間被附加到 打開的項。
再次參考圖3,存在若干種不同類型的枚舉請求。如果操作系統(tǒng)檢測到對 項的子項的枚舉請求,則返回項的列表。在314,如果操作系統(tǒng)在314處檢測 到枚舉項操作,則首先,操作系統(tǒng)確定是否存在與該項相關(guān)聯(lián)的元數(shù)據(jù)(316)。 在本發(fā)明的某些實施例中,操作系統(tǒng)從該元數(shù)據(jù)中確定注冊表是否是合并視圖(318)。在任一種情況下,如果注冊表是合并視圖(318),則返回合并在一 起的兩個項的結(jié)果(320)。如果注冊表不是合并視圖,則執(zhí)行普通處理。如 果操作是對項的值的請求(326),則返回這些項的值(328)。合并項的全局 和專用值。
如果操作是查詢(322)(諸如對名稱或關(guān)于項的其他信息的請求),則 在324,檢索項的實際名稱并更新該名稱(如果有必要的話)以反映對于請求 者的合適名稱。在某些情況下,如果接收到對項的名稱的請求或接收到對關(guān)于 項的其他信息的請求,則返回相對于豎井的名稱而不是該項的全局名稱。
如果遇到的操作是重命名項(330),則操作系統(tǒng)必須確保作為相對于豎 井的名稱的新的名稱(項將被重命名為的名稱)在底層注冊表看見它之前被轉(zhuǎn) 換為全局名稱以使得注冊表正確地重命名該項。在334,如果操作被確定為關(guān) 閉,則調(diào)用RegNtPreKeyHandleClose回調(diào)。在336,刪除與正被關(guān)閉的項相關(guān) 聯(lián)的任何元數(shù)據(jù)。可以理解,以上所列出的動作中的一個或多個可以是可任選 的或被跳過并且各動作可以按除了圖3所描繪的之外的順序來進(jìn)行。
圖5示出了遵循虛擬刪除的創(chuàng)建/打開操作的某些實施例。在502,接收對 注冊表項或值的創(chuàng)建/打開請求。在504,如上所述地執(zhí)行普通豎井合并項處理。 在506,確定正被打開的注冊表項或值是否處于公共構(gòu)成位置。在508,如果 正被打開的注冊表項或值位于合并項的公共部分中,則確定是否存在對于所述 注冊表項或值的刪除標(biāo)記并且如果是,則在510,打開請求失敗。在508,如 果確定不存在對于所述注冊表項或值的刪除標(biāo)記,則執(zhí)行普通豎井合并項處理 (512)。在506,如果確定正被打開的注冊表項或值、位置或子位置不在公共 構(gòu)成位置中,則處理在512處繼續(xù)。刪除標(biāo)記可以按如上所述的任何合適的方 式來實現(xiàn)。
圖6示出了遵循虛擬刪除的注冊表項枚舉操作的某些實施例。在602,接 收對注冊表項或值、位置或子位置的枚舉請求。在604,如上所述地執(zhí)行普通 豎井合并項處理。在606,從專用位置(合并項的專用位置)中過濾刪除標(biāo)記。 在608,過濾掉公共位置中具有專用位置中的對應(yīng)的刪除標(biāo)記的條目。在610, 執(zhí)行普通豎井合并項操作。在本發(fā)明的某些實施例中,過濾掉對于其存在刪除 標(biāo)記的注冊表項或值。顯示結(jié)果或以其他方式返回結(jié)果。圖7示出了虛擬刪除操作的某些實施例。在702,接收對注冊表項或值的
刪除請求。在704,如果未對合并項啟用虛擬刪除語義,則普通處理在706處 繼續(xù)。然而,如果對于合并項啟用虛擬刪除語義,則處理在708處繼續(xù)并且為 正被刪除的注冊表項或值創(chuàng)建刪除標(biāo)記。在710,如果對其接收到刪除請求的 注冊表項或值處于專用位置中,則"刪除"該注冊表項或值(706)。在710, 如果對其接收到的刪除請求的注冊表項或值處于公共位置中,則處理在712處
繼續(xù)。在712,如果與該刪除請求相關(guān)聯(lián)的訪問許可允許刪除,則"刪除"該 注冊表項或值(706)。在712,如果與該刪除請求相關(guān)聯(lián)的訪問許可不允許刪 除,則不刪除該注冊表項或值(714)。
圖8示出了查詢項操作的某些實施例。在802,接收對注冊表項的查詢請 求。在804,執(zhí)行普通豎井査詢項操作。在806,基于存在的任何刪除標(biāo)記更 新子項/值計數(shù)。在808,執(zhí)行普通豎井合并項操作。
此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時以其組合來實現(xiàn)。由 此,本發(fā)明的方法和裝置或其特定方面或部分可釆取包含在諸如軟盤、 CD-ROM、硬盤驅(qū)動器或任何其它機(jī)器可讀存儲介質(zhì)等有形介質(zhì)中的程序代碼 (即,指令)的形式,其中當(dāng)程序代碼被加載到諸如計算機(jī)等機(jī)器內(nèi)并由其執(zhí) 行時,該機(jī)器成為用于實現(xiàn)本發(fā)明的裝置。在程序代碼在可編程計算機(jī)上執(zhí)行 的情況下,計算設(shè)備通常將包括處理器、該處理器可讀的存儲介質(zhì)(包括易失 性和非易失性的存儲器和/或存儲元件)、至少一個輸入設(shè)備、以及至少一個輸 出設(shè)備??衫缤ㄟ^使用數(shù)據(jù)處理API等來利用本發(fā)明的域?qū)S镁幊棠P偷膭?chuàng) 建和/或?qū)崿F(xiàn)的各方面的一個或多個程序較佳地用高級過程語言或面向?qū)ο蟮?編程語言來實現(xiàn)以與計算機(jī)系統(tǒng)通信。然而,如果需要,程序可以用匯編語言 或機(jī)器語言來實現(xiàn)。在任何情形中,語言可以是編譯的或解釋的語言,且與硬 件實現(xiàn)相結(jié)合。
盡管結(jié)合各附圖的優(yōu)選實施例描述了本發(fā)明,但是可以理解,可以使用其 它類似的實施例,或可以對所述實施例進(jìn)行修改或添加來執(zhí)行本發(fā)明的相同功 能而不背離本發(fā)明。因此,本發(fā)明不應(yīng)限于任何單個實施例,而是應(yīng)該根據(jù)所 附權(quán)利要求書的廣度和范圍來解釋。
權(quán)利要求
1. 一種用于執(zhí)行合并注冊表項中的注冊表元素的虛擬刪除的系統(tǒng),包括為在豎井(202)中運行的進(jìn)程(216、217)提供多組注冊表項(206、204)或值的豎井專用合并視圖(212)的操作系統(tǒng)(214),其中所述操作系統(tǒng)(214)通過監(jiān)視發(fā)自在所述豎井(202)中運行的進(jìn)程(216、217)的注冊表項或值訪問請求(240)并且響應(yīng)于檢測到注冊表項或值刪除請求,執(zhí)行為所述注冊表項或值刪除請求中所標(biāo)識的元素創(chuàng)建刪除標(biāo)記的回調(diào)處理來創(chuàng)建所述豎井專用合并視圖(212),其中為其創(chuàng)建所述刪除標(biāo)記的元素從所述多組注冊表項(206、204)或值的豎井專用合并視圖(212)中過濾,所述豎井專用合并視圖(212)對于在所述豎井(202)中運行的進(jìn)程(216、217)表現(xiàn)為包括所述多組注冊表項或值中的條目的單個注冊表。
2. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述多組注冊表項或值系統(tǒng)目錄中的每一個都與一排名相關(guān)聯(lián)。
3. 如權(quán)利要求2所述的系統(tǒng),其特征在于,與所述多組注冊表項或值中的每一個相關(guān)聯(lián)的排名用作當(dāng)所述多組中的不止一個條目憑特定名稱而被知曉時用于確定所述豎井專用視圖中所包括的條目的平局打破器。
4. 如權(quán)利要求3所述的系統(tǒng),其特征在于,所述豎井專用合并視圖包括專用位置和至少一個公共位置,其中所述專用位置中的、所述刪除請求中所標(biāo)識的元素的虛擬刪除隱藏所述至少一個公共位置中的相同命名的元素。
5. 如權(quán)利要求1所述的系統(tǒng),其特征在于,所述操作系統(tǒng)包括經(jīng)由插入在注冊表項或值訪問請求處理路徑中的回調(diào)來檢測虛擬刪除的過濾器驅(qū)動程序,所述注冊表項或值訪問請求處理路徑包括刪除處理、枚舉處理、創(chuàng)建處理、打開處理、查詢處理或重命名處理。
6. 如權(quán)利要求5所述的系統(tǒng),其特征在于,所述注冊表項或值刪除請求為所述注冊表項或值刪除請求中所標(biāo)識的注冊表項或值創(chuàng)建刪除標(biāo)記。
7. —種用于向在豎井中運行的進(jìn)程提供構(gòu)成包括多個注冊表項或值的虛擬合并項的視圖的多組注冊表項或值的視圖的方法,包括使用操作系統(tǒng)中的過濾器驅(qū)動程序來監(jiān)視由在所述豎井中運行的進(jìn)程做出的訪問請求(502),其中所述過濾器驅(qū)動程序通過與合并的虛擬注冊表的項或值相關(guān)聯(lián)的刪除標(biāo)記的存在來檢測所述項或值的虛擬刪除(508);響應(yīng)于檢測到所述刪除標(biāo)記,執(zhí)行與注冊表項或值訪問請求的類型相關(guān)聯(lián)的處理,其中與所述刪除標(biāo)記相關(guān)聯(lián)的元素從所述多組注冊表項或值的視圖中過濾(510)。
8. 如權(quán)利要求7所述的方法,其特征在于,還包括通過創(chuàng)建具有從所述刪除請求中所標(biāo)識的正被刪除的項或值的名稱導(dǎo)出的經(jīng)裝飾的名稱的新的項或值來創(chuàng)建所述刪除標(biāo)記。
9. 如權(quán)利要求7所述的方法,其特征在于,還包括將所述刪除標(biāo)記存儲在外部數(shù)據(jù)存儲中。
10. 如權(quán)利要求7所述的方法,其特征在于,響應(yīng)于確定所述注冊表項或值訪問請求是枚舉注冊表項或枚舉值操作,所述操作系統(tǒng)返回所述視圖,其中所述視圖包括第一個注冊表項或值位置和第二個注冊表項或值位置中除了與刪除標(biāo)記相關(guān)聯(lián)的條目之外的條目的列表。
11. 如權(quán)利要求7所述的方法,其特征在于,響應(yīng)于確定所述注冊表項或值訪問請求是枚舉注冊表項或枚舉值操作,所述操作系統(tǒng)返回所述視圖,其中所述視圖包括所述第一個注冊表位置和所述第二個注冊表位置中除了包括刪除標(biāo)記的條目之外的條目的列表。
12. 如權(quán)利要求7所述的方法,其特征在于,將注冊表項或值系統(tǒng)元素重命名為指示虛擬刪除的名稱的注冊表項或值訪問請求是被禁止的。12. 如權(quán)利要求7所述的方法,其特征在于,試圖打開與刪除標(biāo)記相關(guān)聯(lián)的元素的注冊表項或值訪問請求失敗。
13. 如權(quán)利要求7所述的方法,其特征在于,所述進(jìn)程對所述第一個注冊表項位置中的條目的訪問經(jīng)由創(chuàng)建所述視圖被限于只讀訪問。
14. 如權(quán)利要求7所述的方法,其特征在于,對于所述進(jìn)程對所述第二個注冊表項位置中的條目的一組訪問特權(quán)準(zhǔn)許刪除所述條目。
15. —種其上存儲有程序代碼的計算機(jī)可讀介質(zhì),所述程序代碼當(dāng)由計算環(huán)境執(zhí)行時使得所述計算環(huán)境使用操作系統(tǒng)的過濾器驅(qū)動程序來監(jiān)視在豎井中運行的進(jìn)程,其中所述過濾器驅(qū)動程序檢測由在所述豎井中運行的進(jìn)程做出的注冊表訪問請求(602);響應(yīng)于檢測到所述注冊表訪問請求,執(zhí)行與注冊表項或值訪問請求的類型相關(guān)聯(lián)的處理(604),其中多組實際注冊表項或值的視圖被提供給所述進(jìn)程,其中所述視圖將所述多組實際注冊表項或值作為包括所述多組實際注冊表項或值的條目的單個合并的虛擬注冊表來呈現(xiàn)給所述進(jìn)程,其中與刪除標(biāo)記相關(guān)聯(lián)的條目從所述視圖中消除(606)。
16. 如權(quán)利要求15所述的計算機(jī)可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼為刪除訪問請求所標(biāo)識的元素創(chuàng)建刪除標(biāo)記,其中所述刪除標(biāo)記包括從所述刪除標(biāo)記中所標(biāo)識的正被刪除的元素的名稱導(dǎo)出的經(jīng)裝飾的項或值名稱。.
17. 如權(quán)利要求15所述的計算機(jī)可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼將刪除標(biāo)記與刪除訪問請求所標(biāo)識的元素相關(guān)聯(lián),其中所述刪除標(biāo)記被存儲在外部數(shù)據(jù)存儲中。
18. 如權(quán)利要求15所述的計算機(jī)可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼將刪除標(biāo)記與刪除訪問請求所標(biāo)識的元素相關(guān)聯(lián),其中所述刪除標(biāo)記被存儲在所述注冊表中。
19. 如權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼在接收到枚舉請求時過濾掉與刪除標(biāo)記相關(guān)聯(lián)的元素。
20. 如權(quán)利要求16所述的計算機(jī)可讀介質(zhì),其特征在于,其上還存儲有當(dāng)由所述計算環(huán)境執(zhí)行時使得所述計算環(huán)境執(zhí)行以下動作的程序代碼禁止為新的注冊表項創(chuàng)建名稱,其中所述名稱包括刪除標(biāo)記。
全文摘要
諸如注冊表項或值等元素通過為元素創(chuàng)建刪除標(biāo)記來虛擬地刪除。兩組或多組單獨的實際注冊表項/值作為一個合并的(虛擬的)注冊表來呈現(xiàn)給在豎井中運行的進(jìn)程。操作系統(tǒng)通過監(jiān)視由計算機(jī)或計算機(jī)系統(tǒng)上的豎井中的進(jìn)程做出的注冊表項或值系統(tǒng)請求并過濾掉與刪除標(biāo)記相關(guān)聯(lián)的元素來提供注冊表的合并視圖。特殊處理響應(yīng)于檢測到特定類型的注冊表項或值系統(tǒng)訪問請求來調(diào)用,這些注冊表項或值系統(tǒng)訪問請求的類型包括但不限于枚舉、打開、創(chuàng)建、重命名或刪除。
文檔編號G06F9/06GK101535949SQ200780041085
公開日2009年9月16日 申請日期2007年10月16日 優(yōu)先權(quán)日2006年11月2日
發(fā)明者F·J·史密斯, J·L·哈文斯, M·泰魯利, Y·A·哈利迪 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
山阴县| 库伦旗| 通渭县| 措美县| 黑水县| 泰来县| 佛坪县| 湘潭县| 资溪县| 营山县| 怀宁县| 禹州市| 沙河市| 宁强县| 喀喇沁旗| 剑阁县| 衡南县| 彰武县| 常山县| 西吉县| 颍上县| 资中县| 白水县| 平山县| 赫章县| 汕头市| 仙游县| 安泽县| 丹江口市| 陆川县| 旌德县| 西乌| 连城县| 志丹县| 东兴市| 玉门市| 汉川市| 蓝山县| 新疆| 北安市| 天长市|