1. 程式人生 > >好玩的登錄檔:ControlSet

好玩的登錄檔:ControlSet

早想寫點關於登錄檔的東西,苦於這方面比較枯燥,加上本人水平不高,怕寫不好被人拍磚。不過有些好玩的小知識還是可以寫寫的,不會那麼枯燥。積少成多,希望可以持續下去。
1.先說一下ControlSet幾個控制元件組之間的關係。
     在登錄檔HKLM/system登錄檔項中包括用於windows啟動的三個控制元件組(額外還可能存在一個備份控制元件組),在初始狀態下,它們分別是ControlSet001、ControlSet002以及CurrentControlSet。這些控制元件組中包含了作業系統配置的資訊,比如服務、驅動、系統控制、列舉資訊等等。
     預設情況下,ControlSet001是系統真實的配置資訊,但是為了避免序號混亂,windows啟動時會從ControlSet001複製一份副本,作為作業系統當前的配置資訊,也就是CurrentControlSet。我們對於計算機配置所作的修改都是直接寫入到CurrentControlSet,在重啟過程中,windows會用CurrentControlSet的內容覆蓋掉ControlSet001,以保證這兩個控制元件組一致。
     當作業系統每成功啟動一次(指成功登入),它都將CurrentControlSet和ControlSet001中的資料複製到ControlSet002中。這樣,ControlSet002就成了“最近一次成功啟動的配置資訊”(很熟悉吧?在啟動windows前按下F8所調出的選單中有這個選項)。所以我們一般系統登錄檔中都只是有這三個控制元件組,並且序號都是current、001和002。(此後均用簡稱

     但是,這個順序和數目不是一成不變的,改變就發生在使用過“最近一次的正確配置”之後。這個時候,系統會把002當作系統真實的配置資訊,而001這個存在問題的控制元件組會被備份封存起來。系統啟動時會從002複製副本到current,啟動成功後又會把002和current的資訊複製一份到一個新的控制元件組作為新的“最近一次的正確配置”,也就是003。這個時候系統就存在4個控制元件組:current、002、003和備份的001,這裡的001是一個存在問題的組,除非我們想把系統恢復到上次使用“最近一次正確配置”之前的狀態,否則001的內容將不再被使用。
  HKLM/system登錄檔項中還有一個select的子項,其中有幾個整數鍵,分別是:
“Current”資料專案表示 Windows XP 在這次啟動過程中使用的控制元件組。  
“Default”資料專案表示 Windows XP 在下次啟動時將使用的控制元件組,它與這次啟動使用的控制元件組相同。  
“LastKnownGood ”資料專案表示您在啟動過程中選擇“最近一次的正確配置”時 Windows XP 將使用的控制元件組。  
“Failed”資料項表示 Windows XP 在其中儲存失敗啟動產生的資料的控制元件組。 此控制元件組在使用者第一次呼叫“最近一次的正確配置”選項之前並不實際存在。  
對應上面,系統預設時其順序是:001、001、002、無;
第一次使用“lastknowngood”後:002、002、003、001
第二次使用“lastknowngood”後:003、003、004、002(之前的備份001被002覆蓋掉,001組消失)
第三次使用“lastknowngood”後:004、004、001、003(002被003覆蓋,而當004要生成新的“lastknowngood”時,001正好可用,於是001重生,002消失)
     依此類推,第四次1、1、2、4,第五次2、2、3、1…………
     根據上面的介紹,大概有個深入瞭解了吧?想一想,如果我們想把failed還原,該怎麼做?嘿嘿。下次要寫點關於防範U盤病毒的登錄檔技巧和知識。