【Windows核心原理與實現】讀書筆記(四)

來源:互聯網
上載者:User
文章目錄
  • 組態管理員和註冊表的初始化過程
註冊表和組態管理員

Windows作業系統提供了被稱為“註冊表”的中心儲存設施作為系統的配置和管理中心,應用程式和核心通過訪問註冊表來讀寫各種設定。Windows提供了一些API供應用程式訪問註冊表,這些API函數在接到註冊表訪問請求之後,當它們轉寄給核心的系統服務。在核心中,執行體包含一個成為“組態管理員”的組件,它是註冊表的真正實現。

註冊表是一組成為儲巢(hive)的檔案構成的,每個儲巢檔案內部都包含了一個樹狀階層。Windows註冊表是一個樹狀結構,每個節點是一個鍵(key)或值(value)。鍵是一個容器,可以包含其他的鍵(稱為子鍵)和值。值儲存的是資料。註冊表的根是一個鍵,稱為根鍵。

註冊表的值可以有多種類型。絕大多數註冊表值的類型為REG_DWORD、REG_BINARY、REG_SZ。有一種特殊的類型為REG_LINK,即符號連結,允許一個鍵或值指向另一個鍵或值。

真正存放系統設定資訊的字數是HKLM(HKEY_LOCAL_MACHINE)和HKU(KHEY_USERS)。HKLM存放著有關係統全域的資訊,包括5個子鍵,分別為HARDWARE(硬體設定)、SAM(本地賬戶和組的資訊)、SECURITY(系統全域範圍的安全性原則和使用者權限設定)、SOFTWARE(系統中的全域配置資訊,包括裝置驅動程式和系統服務等)。HKU位系統中每個載入過的使用者輪廓包含了一個子鍵,也包含了一個名為.DEFAULT的子鍵,這是系統的預設輪廓。

一個系統的儲巢列表存放在KHLM\SYSTEM\CurrentControlSet\Control\hivelist鍵下。當系統初始化時,HKLM\SYSTEM總是唄先載入進來,然後組態管理員找到hivelist鍵,繼而載入其他儲巢,並建立註冊表根鍵,將這些儲巢連結起來,從而建立起完整的註冊表結構。

儲巢的基本配置單位稱為塊(block),當儲巢為了儲存新的資料而需要擴充時,它總是按照塊的粒度來增長。在Windows中,註冊表的塊大小為4KB。儲巢的第一個塊稱為基本塊,它包含了儲巢檔案標識、最新序號、最後一次寫操作的時間戳記、儲巢格式的版本號碼、校正和以及儲巢的內部檔案名稱。

儲巢中的註冊表資料是按照巢室(cell)來組織的。每個巢室可以存放一個鍵、值、安全性描述元、子鍵列表或者值列表,對應的巢室分別稱為鍵巢室、值巢室、安全性描述元巢室、子鍵列表巢室和值列表巢室。巢室在儲巢檔案中的位移稱為該巢室的索引(cell index),其他巢室可以利用此巢室索引來引用它,從而建立起巢室之間的關係。

巢室的大小不是固定的,組態管理員根據需要從巢室中申請特定大小的儲存空間作為一個巢室。如果組態管理員必須要擴充已有的儲巢檔案才能分配一個新的巢室,那麼它會申請一個稱為巢箱(bin)的儲存單元。巢箱總是以塊為邊界。當為一個巢室而擴充儲巢檔案時,實際申請的儲存空間要擴充到下一個塊邊界。巢箱中未被使用的空間被當做空閑空間管理起來,從而可以再分配給其他巢室。當巢室被刪除時,它們的空間會被回收,如果有可能,相鄰的空閑空間被合并成更大的空閑空間。儲巢檔案本質上是越長越大,要想壓縮整個儲巢檔案中的空閑巢箱,只有在原來出招的基礎上重構一個新的儲巢檔案(通過RegSaveKey函數),然後替換成或恢複該儲巢所在的鍵(通過RegReplaceKey或RegRestoreKey函數)。

在Windows XP/Server 2003中,組態管理員利用緩衝管理器來映射儲巢檔案中的資料,它可以有選擇的映射所需要的那部分資料,並且也能夠接觸不再需要訪問的資料或者長久不訪問的資料,以避免儲巢檔案佔據太多的系統緩衝空間。

  • 組態管理員和註冊表的初始化過程
  1. 核心初始化階段,建立起HKLM\SYSTEM和HKLM\HARDWARE儲巢
  2. 由會話管理器(smass.exe進程)建立起HKLM\SAM、HKLM\SECURITY、HKLM\SOFTWARE和HKU\DEFAULT儲巢
  3. 當載入使用者輪廓時建立起HKU\<使用者的SID>儲巢,這是由登陸進程winlogon.exe來完成的。

組態管理員充分利用了對象管理器提供的對象管理架構,讓註冊表中的每個鍵自動成為對象管理器中的一個對象。對於每個開啟的註冊表鍵,組態管理員分配一個鍵控制塊(key control block),其資料結構為CM_KEY_CONTROL_BLOCK,它包含了該控制塊所引用的鍵節點所在的儲巢和巢室索引。組態管理員將所有的鍵控制塊放在一張散列表(全域變數CmpCacheTable)中,因而可以快速地根據名稱來搜尋已有的鍵控制塊。散列表CmpCacheTable實際上是一個包含了2048個元素的數組,散列表的鍵ID是由鍵控制塊所引用的鍵對象的名稱通過計算而獲得。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.