Windows系統註冊表知識完全揭密發布

來源:互聯網
上載者:User

Windows系統註冊表知識完全揭密發布

   Windows註冊表是協助Windows控制硬體、軟體、使用者環境和Windows介面的一套資料檔案,註冊表包含在Windows目錄下兩個檔案system.dat和user.dat裡,還有它們的備份system.da0和user.da0。通過Windows目錄下的regedit.exe程式可以存取註冊表資料庫。在以前,在windows的更早版本(在Win95以前),這些功能是靠win.ini,system.ini和其他和應用程式有關聯的.ini檔案來實現的.
  在windows作業系統家族中,system.ini和win.ini這兩個檔案包含了作業系統所有的控制功能和應用程式的資訊,system.ini管理電腦硬體而win.ini管理案頭和應用程式。所有驅動、字型、設定和參數會儲存在.ini檔案中,任何新程式都會被記錄在.ini檔案中。這些記錄會在程式碼中被引用。因為受win.ini和system.ini檔案大小的限制,程式員添加輔助的.INI檔案以用來控制更多的應用程式。舉例來說,微軟的Excel有一個office excel.ini檔案,它包含著選項、設定、預設參數和其他關係到Excel運行正常的資訊。在system.ini和win.ini中只需要指出excel.ini的路徑和檔案名稱即可。
  早在Dos和Win3.x的時代,大部分的應用程式都是採用了 ini 檔案(初始設定檔案)來儲存一些配置資訊,如設定路徑,環境變數等。system.ini和win.ini控制著所有windows和應用程式的特徵和存取方法,它在少數的使用者和少數應用程式的環境中工作的很好。隨著應用程式的數量和複雜性越來越大,則需要在.ini檔案中添加更多的參數項。
  這樣下來,在一個變化的環境中,在應用程式安裝到系統中後,每個人都會更改.ini檔案。然而,沒有一個人在刪除應用程式後刪除.ini檔案中的相關設定,所以system.ini和win.ini這個兩個檔案會變的越來越大。每增加的內容會導致系統效能越來越慢。而且每次應用程式的升級都出現這樣的難題:升級會增加更多的參數項但是從來不去掉舊的設定。而且還有一個明顯的問題,一個.ini檔案的最大尺寸是64KB。為瞭解決這個問題,軟體商自己開始支援自己的.ini檔案,然後指向特定的ini檔案如win.ini和system.ini檔案。這樣下來多個.ini檔案影響了系統正常的存取層級設定。如果一個應用程式的.ini檔案和WIN.INI檔案設定起衝突,究竟是誰的優先順序更高呢?
  註冊表最初被設計為一個應用程式的資料檔案相關參考檔案,最後擴充成對於32位作業系統和應用程式套件組合括了所有功能下的東東。註冊表是一套控制作業系統外表和如何響應外來事件工作的檔案。這些“事件”的範圍從直接存取一個硬體裝置到介面如何響應特定使用者到應用程式如何運行等等。註冊表因為它的目的和性質變的很複雜,它被設計為專門為32位應用程式工作,檔案的大小被限制在大約40MB。利用一個功能強大的註冊表資料庫來統一集中地管理系統硬體設施,軟體配置等資訊,從而方便了管理,增強了系統的穩定性。最直觀的一個執行個體就是,為什麼windows下的不同使用者可以擁有各自的個人化,如不同的牆紙,不同的案頭。這就是通過註冊表來實現的。
  由此可見,註冊表(Registry)是Windows9x/Me/NT/2000作業系統、硬體裝置以及客戶應用程式得以正常運行和儲存設定的核心“資料庫”;是一個巨大的樹狀分層的資料庫。它記錄了使用者安裝在機器上的軟體和每個程式的相互關聯關係;它包含了電腦的硬體設定,包括自動設定的隨插即用的裝置和已有的各種裝置說明、狀態屬性以及各種狀態資訊和資料等。
  一、註冊表都做些什嗎?
  註冊表是為Windows NT和Windows95中所有32位硬體/驅動和32位應用程式設計的資料檔案。16位驅動在Windows NT下無法工作,所以所有裝置都通過註冊表來控制,一般這些是通過BIOS來控制的。在Win9x下,16位驅動會繼續以實模式方式裝置工作,它們使用system.ini來控制。16位應用程式會工作在NT或者Win9x 下,它們的程式仍然會參考win.ini和system.ini檔案獲得資訊和控制。
  在沒有註冊表的情況下,作業系統不會獲得必須的資訊來運行和控制附屬的裝置和應用程式及正確響應使用者的輸入。
  在系統中註冊表是一個記錄32位驅動的設定和位置的資料庫。當作業系統需要存取硬體裝置,它使用驅動程式,甚至裝置是一個BIOS支援的裝置。無BIOS支援的裝置安裝時必須需要驅動,這個驅動是獨立於作業系統的,但是作業系統需要知道從哪裡找到它們,檔案名稱、版本號碼、其他設定和資訊,沒有註冊表對裝置的記錄,它們就不能被使用。
  當一個使用者準備運行一個應用程式,註冊表提供應用程式資訊給作業系統,這樣應用程式可以被找到,正確資料檔案的位置被規定,其他設定也都可以被使用。
  註冊表儲存關於預設資料和輔助檔案的位置資訊、菜單、按鈕條、視窗狀態和其他可選項。它同樣也儲存了安裝資訊(比如說日期),安裝軟體的使用者,軟體版本號碼和日期,序號等。根據安裝軟體的不同,它包括的資訊也不同。
  然而,一般來說,註冊表控制所有32位應用程式和驅動,控制的方法是基於使用者和電腦的,而不依賴於應用程式或驅動,每個註冊表的參數項控制了一個使用者的功能或者電腦功能。使用者功能可能包括了案頭外觀和使用者目錄。所以,電腦功能和安裝的硬體和軟體有關,對所以使用者來說項都是公用的。
  有些程式功能對使用者有影響,有些時作用於電腦而不是為個人設定的,同樣的,驅動可能是使用者指定的,但在很多時候,它們在電腦中是通用的。
  二、註冊表的結構劃分及相互關係
  WINDOWS的註冊表有六大根鍵,相當於一個硬碟被分成了六個分區。
  在“運行”對話方塊中輸入RegEdit,然後單擊“確定”按鈕,則可以運行登錄編輯程式。
  Windows 98中文版的註冊表Registry(System.dat、User.dat、Config.pol)的資料群組織結構。
  註冊表的根鍵共六個。這些根鍵都是大寫的,並以HKEY_為首碼;這種命令約定是以Win32 API的Registry函數的關鍵字的符號變數為基礎的。
  雖然在註冊表中,六個根鍵看上去處於一種並列的地位,彼此毫無關係。但事實上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的資訊都是HKEY_LOCAL_MACHINE中存放的資訊的一部分,而HKEY_CURRENT_USER中存放的資訊只是HKEY_USERS存放的資訊的一部分。
  HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的資訊。在每次系統啟動後,系統就映射出HKEY_CURRENT_USER中的資訊,使得使用者可以查看和編輯其中的資訊。
  實際上,HKEY_LOCAL_MACHINE/SOFTWARE/Classes就是HKEY_CLASSES_ROOT,為了使用者便於查看和編輯,系統專門把它作為一個根鍵。同理,HKEY_CURRENT_CONFIG/SY-STEM/Current Control就是HKEY_LOCAL_MACHINE/SYSTEM/Current Control。
  HKEY_USERS中儲存了預設使用者和當前登入使用者的使用者資訊。HKEY_CURRENT_USER中儲存了當前登入使用者的使用者資訊。
  HKEY_DYN_DATA儲存了系統運行時的動態資料,它反映出系統的目前狀態,在每次運行時都是不一樣的,即便是在同一台機器上。
  根據上面的分析,註冊表中的資訊可以分為HKEY_LOCAL_MACHINE和HKEY_USERS兩大類,這兩大類的詳細內容請看後面的介紹。
  三、六大根鍵的作用
  在註冊表中,所有的資料都是通過一種樹狀結構以鍵和子鍵的方式組織起來,十分類似於目錄結構。每個鍵都包含了一組特定的資訊,每個鍵的鍵名都是 和它所包含的資訊相關的。如果這個鍵包含子鍵,則在登錄編輯程式視窗中代表這個鍵的檔案夾的左邊將有“+”符號,以表示在這個檔案夾中有更多的內容。如果這個檔案夾被使用者開啟了,那麼這個“+”就會變成“-”。
  1.HKEY_USERS
  該根鍵儲存了存放在本機電腦口令列表中的使用者標識和密碼列表。每個使用者的預配置資訊都儲存在HKEY_USERS根鍵中。HKEY_USERS是遠端電腦中訪問的根鍵之一。
  2.HKEY_CURRENT_USER
  該根鍵包含本地工作站中存放的當前登入的使用者資訊,包括使用者登入使用者名稱和暫存的密碼(註:此密碼在輸入時是隱藏的)。使用者登入Windows 98時,其資訊從HKEY_USERS中相應的項拷貝到HKEY_CURRENT_USER中。
  3.HKEY_CURRENT_CONFIG
  該根鍵存放著定義目前使用者案頭配置(如顯示器等)的資料,最後使用的文檔列表(MRU)和其他有關目前使用者的Windows 98中文版的安裝的資訊。
  4.HKEY_CLASSES_ROOT
  根據在Windows 98中文版中安裝的應用程式的副檔名,該根鍵指明其檔案類型的名稱。
  在第一次安裝Windows 98中文版時,RTF(Rich Text format)檔案與寫字板(WordPad)&127;聯絡起來,但在以後安裝了中文Word 6.0後,雙擊一個RTF檔案時,將自動啟用Word。存放在SYSTEM.DAT中的HKEY_CLASSES_ROOT,將替代WIN.INI檔案中的[Extensions]&127;小節中的設定項,它把應用程式與副檔名聯絡起來,它也替代了Windows 3.x中的Reg.dat檔案中的相似的設定項。
  5.HKEY_LOCAL_MACHINE
  該根鍵存放本機電腦硬體資料,此根鍵下的子關鍵字包括在SYSTEM.DAT中,用來提供HKEY_LOCAL_MACHINE所需的資訊,或者在遠端電腦中可訪問的一組鍵中。
  該根鍵中的許多子鍵與System.ini檔案中設定項類似。
  6.HKEY_DYN_DATA
  該根鍵存放了系統在運行時動態資料,此資料在每次顯示時都是變化的,因此,此根鍵下的資訊沒有放在註冊表中。
  四、註冊表部分重要內容
  註冊表是一個大型資料庫Registry。要詳細地分析該資料庫,不是一兩頁就能介紹完。我曾經用了半年多時間分析此資料庫結構。下面只介紹部分重要內容。
  (一)HKEY_CLASS_ROOT
  1.HKEY_CLASS_ROOT/Paint.Pricture/DefaultIcon雙擊視窗右側的預設字串,在開啟的對話方塊中刪除原來的“索引值”,輸入%1。重新啟動後,在“我的電腦”中開啟Windows目錄,選擇“大表徵圖”,然後你看到的Bmp檔案的表徵圖再也不是千篇一律的MSPAINT表徵圖了,而是每個Bmp檔案的略圖(前提是未安裝ACDSee等看圖軟體)。
  (二)HKEY_CURRENT_USER
  1.HKEY_CURRENT_USER/Control Panel/Desktop 中建立串值名MenuShowDelay=0 可使“開始”菜單中子功能表的彈出速度提高。
  2.在HKEY_CURRENT_USER/Control Panel/Deskt-op/WindowsMeterics中建立串值名MinAnimate,值為1啟動動畫效果開關視窗,值為0取消動畫效果。
  (三) HKEY_LOCAL_MACHINE
  1.HKEY_LOCAL_MACHINE/software/microsoft/windows/currentVersion/explorer/user shell folders 儲存個人資料夾、收藏夾的路徑。
  2.HKEY_LOCAL_MACHINE/system/currentControl-Set/control/keyboard Layouts 儲存鍵盤使用的語言以及各種中文IME。
  3.HKEY_LOCAL_MACHINE/software/microsoft/windows/currentVersion/uninstall 儲存已安裝的Windows應用程式卸載資訊。
  4.HKEY_LOCAL_MACHINE/system/CurrentControl-Set/services/class 儲存控制台-增添硬體裝置-裝置類型目錄。
  5.HKEY_LOCAL_MACHINE/system/Current-ControlSet/control/update 設定重新整理方式。值為00設定為自動重新整理,01設定為手工重新整理[在資源管理員中按F5]。
  6.HKEY_LOCAL_MACHINE/software/microsoft/win-dows/currentVersion/run 儲存由控制台設定的電腦啟動時運行程式的名稱,其表徵圖顯示在任務條右邊。在“啟動”檔案夾程式運行時表徵圖也在任務條右邊。
  7.HKEY_LOCAL_MACHINE/software/microsoft/windows/currentVersion/Policies/Ratings 儲存IE4.0中文版“安全”/“分級審查”中設定的口令(資料加密),若遺忘了口令,刪除 Ratings 中的資料即可解決問題。
  8.HKEY_LOCAL_MACHINE/software/microsoft/windows/currentVersion/explorer/desktop/nameSpace 儲存案頭中特殊的表徵圖,如資源回收筒、收件匣、MS Network等。
  (四) HKEY_USERS
  1.HKEY_USERS/.Default/software/microsoft/internet explorer/typeURLs儲存IE4.0瀏覽器地址欄中輸入的URL地址清單資訊。清除文檔菜單時將被清空。
  2.HKEY_USERS/.Default/so../mi../wi../current-Version/ex../menuOrder/startMenu保留程式菜單排序資訊。
  3.HKEY_USERS/.Default/so../microsoft/windows/current-Version/explorer/RunMRU儲存“開始 / 運行...”中啟動並執行程式列表資訊。清除文檔菜單時將被清空。
  4.HKEY_USERS/.Default/so../microsoft/windows/current-Version/explorer/RecentDocs 儲存最近使用的十五個文檔的捷徑(刪除掉可解決文檔名稱重複的毛病),清除文檔菜單時將被清空。
  5.HKEY_USERS/.default/software/microsoft/windows/currentVersion/applets 儲存Windows應用程式的記錄資料。
  6.HKEY_USERS/.default/software/microsoft/windows/currentVersion/run儲存由使用者設定的電腦啟動時運行程式的名稱,其表徵圖顯示在任務條右側。
  五、與註冊表有關的術語:

  ①、註冊表:是一個樹狀分層的資料庫。從物理上講,它是System.dat和User.dat兩個檔案;從邏輯上講,它是使用者在登錄編輯程式中看到的配置資料。
  ②、HKEY :“根鍵”或“主鍵”,它的表徵圖與資源管理員中檔案夾的表徵圖有點兒相像。Windows98將註冊表分為六個部分,並稱之為 HKEY_name,它意味著某一鍵的控制代碼。
  ③、key(鍵):它包含了附加的檔案夾和一個或多個值。
  ④、subkey(子鍵):在某一個鍵(父鍵)下面出現的鍵(子鍵)。
  ⑤、branch(分支):代表一個特定的子鍵及其所包含的一切。一個分支可以從每個註冊表的頂端開始,但通常用以說明一個鍵和其所有內容。
  ⑥、value entry(值項):帶有一個名稱和一個值的有序值。每個鍵都可包含任何數量的值項。每個值項均由三部分組成:名稱,資料類型,資料。
  ★ 名稱:不包括反斜線的字元、數字、代表符、空格的任意組合。同一鍵中不可有相同的名稱。
  ★ 資料類型:包括字串、二進位、雙字三種。
  字串(REG_SZ):顧名思義,一串ASCII碼字元。如“Hello World”,是一串文字或片語。在註冊表中,字串值一般用來表示檔案的描述、硬體的標識等。通常它由字母和數字組成。註冊表總是在引號內顯示字串。
  二進位(REG_BINARY):如 F03D990000BC ,是沒有長度限制的位元值,在登錄編輯程式中,位元據以十六進位的方式顯示出來。
  雙 字(REG_DWORD):從字面上理解應該是Double Word ,雙位元組值。由1-8個十六進位資料群組成,我們可用以十六進位或十進位的方式來編輯。如 D1234567 。
  ★ 資料: 值項的具體值,它可以佔用到64KB。
  ⑦、 Default(預設值):每一個鍵至少包括一個值項,稱為預設值(Default),它總是一個字串。

該文章轉載自指令碼之家:http://www.jb51.net/html/200610/90/3328.htm 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.