1.為什么一定要使用注冊表
或許你會問,注冊表既復雜,修改不當又容易引發系統故障,而DOS或早期的Windows沒有注冊表卻也能正常工作,那么現在的Windows一定需要注冊表呢?
DOS是一個純命令操作平臺,沒有圖形界面,一切輸入均通過命令的方式來解決。要打開文本文件1.txt需要輸入“edit 1.txt”命令才行,也就是說“要打開什么文件”,“用什么程序打開此文件”這些問題都必須由你來告訴計算機。而現在的Windows系統中,要打開1.txt的屬性只需在“資源管理器”雙擊此文件即可,你只要指定要打開的文件,計算機就會根據你要打開的文件類型自動選擇合適的應用程序進行操作,這種智能的打開方法就是由注冊表中保存的“文件關聯”數據(出了“文件關聯”外,注冊表還存放了其他很多重要的設置數據)。這種發展是由計算機的復雜性決定,在DOS時代可能無需這種機制,但如果現在Windows沒有“文件關聯”,那成千上萬種文件類型一定會讓你看眼花。
2.注冊表的“媽媽”是誰
Windows設計之初,并沒有采用注冊表這種方式來存放軟硬件配置信息,而是使用了兩個擴展名為INI的文件(system.ini和win.ini)。對于INI文件大家應該很熟悉了,很多“綠色軟件”都聲稱其不在注冊表中寫入任何數據,但大多會在其安裝目錄下留下一個或幾個INI文件。既然當初使用的是INI,為什么后來又改成注冊表了呢?這是因為INI文件有一個致命的弱點就是大小不能超過64KB,隨著軟硬件功能的日益進步,其所需的配置數據體積也在不斷膨脹,INI文件早已無法滿足這種數據量的要求了。另外INI其實是依據某種定義規范的文本文件,編輯過程極易出錯并由此導致系統故障,為了克服這些問題,在Windows 95及其后的版本中,Window系統都無一例外的采用了注冊表機制,并將原來由多個INI組成的軟硬件配置信息統一到了一起,形成一個數據庫,那就是注冊表。
3.注冊表的家在哪里
既然注冊表是一個數據庫,那么這個數據庫文件在那里呢?其實,難怪不少剛接觸電腦的朋友誤以為regedit.exe就是注冊表,這是由于對注冊表數據庫的組成不清楚而造成的。Windows 98注冊表的數據文件主要由System.dat和User.dat這兩個文件組成,并保存在C:Windows目錄下,其中System.dat存儲的是系統和硬件相關的配置,而User.dat則保存軟件配置和用戶配置,Windows 2000/XP注冊表的數據文件主要存儲在%Windir%System32config目錄中的Default,Sam,Security,System,software和Userdiff等6個文件中,除此之外,還有部分數據保存在用戶的配置文件目錄中,比如Window 2000/XP中的Administrator的部分注冊表數據就保存在C:Documents and SettingsAdministrator目錄的Ntuser.dat文件中,所以只需要Administrator登陸系統后其目錄下的NTUSER.DAT就不能被刪除,因為它已經被加載到注冊表中了。
兩個知識點理清錯綜復雜的注冊表脈絡
1.查查注冊表元素的身份證
運行regedit.exe打開“注冊表編輯器”,就能在其左側看到注冊表的分支結構,其中以文件夾方式表示的稱為“鍵”,而在選中一個鍵后在窗口右側顯示的則稱為“項”。在網上搜索到的修改教程中經常會提到“根鍵”,“主鍵”,“子鍵”,“鍵值項”,是什么意思呢?
①根鍵(Root Key)是指在注冊表編輯器左側以“HKEY”作為名稱前綴的位置,因其位于注冊表最項層被稱為根鍵,如Windows XP的注冊表中包括五大根鍵,分別為HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS和HKEY_CURRENT_CONFIG。這些根鍵都可所寫的,譬如HKEY_CLASSES_ROOT就可以簡寫為HKCR,其它的則以此類推。
②主鍵(Main Key)是指根鍵下面于根鍵最近的鍵,主鍵通常包括一個或多個子鍵或鍵值,如圖中HKEY_LOCAL_MACHINE包括5個主鍵。
③子鍵(Sub Key)的位置是相對的,并不固定。某個鍵下面包含的另一個鍵則稱它為前者的子鍵。但主鍵則不能稱為根鍵的子鍵,這種以相對位置關系來命名的方式不能用于根鍵和主鍵。
④鍵值項(Value entry)是指顯示在“注冊表編輯器”右側的項目,每個鍵值項包括名稱,類型和數據三部分。鍵值項的名稱可以由任意字符,數字,代表符和空格組成,但不能使用反斜杠。不同鍵值,主鍵和子鍵的鍵值項可以同名,但同一鍵中的鍵值項不能同名。鍵值項所定義的內容即為該鍵值項的值(即“鍵值”),其中最多能存放64KB的數據。值的數據類型可以是字符串,二進制值,DWORD(雙字節)值等。
小提示:上面的描述方法較為規范,平時我們還習慣將“子鍵”稱為“分支”,而將“鍵值項”簡稱為“項”,這些稱謂沒有本質區別,只是叫法習慣不同罷了。
2.真正的根鍵只有兩個
Windows 98的注冊表有6個鍵值,而Windows 2000/XP/2003系統的根鍵數則是5個,但這些根鍵中只有HKEY_LOCAL_MACHINE和HKEY_USERS是真正的注冊表鍵,其它幾個鍵值都是從這兩個根鍵的某個分支映射出來的,相對于這兩個根鍵深層分支的一個快捷方式或者別名,主要是為了方便用戶操作。
⑴HKEY_LOCAL_MACHINE
這個根鍵存儲的是安裝在當前計算機上的硬件和軟件配置信息,比如硬件設備的驅動程序,特定軟件設置和Windows系統安裝配置等數據。這些信息對當前系統中的所有用戶均保持一致。這個根鍵下面還有5個重要的主鍵,其中Software和System最為關鍵,平時對系統進行相關調整大多集中在這兩個鍵上。
①Software子鍵:保存于這臺電腦中安裝的應用程序和相關的設置,許多應用程序都使用該鍵值保存特定設置。關于Windows的許多設置都存在于HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion中。
②System子鍵:在這里精確的確定了Windows所裝載的設備驅動程序和服務,以及當Windows啟動時所使用的各種參數(如在網絡上的計算機名稱和當前硬件配置恩見)。
⑵HKEY_USERS
HKEY_USERS包含有電腦特定用戶的配置數據,Windows在此根鍵下的一個子鍵中為登陸該電腦的每個用戶存儲配置數據。如果電腦只有一個用戶使用,那么所看到的就是單獨一個子鍵,稱為“.DEFAULT”
而HKEY_USERSS-1-5-21-1078081533-1202660629-1343024091-500(不同的電腦不一樣)則是當前登陸用戶的配置數據,其中S-1-5-21-1078081533-1202660629-1343024091-500就是這個目前登陸用戶的SID,每一個網絡上的用戶都被域用戶管理器分配了一個SID,每個SID是唯一的,所以它依賴于登陸用戶,其分支數據是從用戶配置文件的Ntuser.dat文件調出的