注冊表是Windows操作系統中的一個重要組成部分,它主要用于存儲Windows中各個組件、應用程序、驅動程序等的配置信息和設置參數。Windows操作系統的許多功能和特性都依賴于注冊表來存儲和管理相關的配置信息,包括用戶界面、網絡連接、硬件驅動、系統安全等等方面。
注冊表的結構類似于一個樹狀結構,由多個分支和葉子節點組成。最上層為HKEY_CLASSES_ROOT、HKEY_CURRENT_USER等分支節點,每個節點下面包含著若干個子項,子項下面則包含著若干個鍵值對,也就是存儲著實際配置信息的數據單元。
Windows 3.1首次引入了注冊表,至今仍被廣泛使用。注冊表已經取代了autoexec.bat、config.sys以及幾乎所有早期版本的Windows中的INI文件,成為了配置和管理系統的主要方式。極大地簡化了系統配置和管理的過程。
發展歷史
在注冊表問世之前,Windows系統和應用程序的信息通常被存儲在后綴名為ini的文本文件中。然而,由于每個程序都會新安裝一個或多個ini文件來存儲程序信息,導致信息的分布極為零亂,不便于使用和管理。
1993年,微軟推出了Windows NT 3.1操作系統。NT注冊表的結構和功能與后續的Windows版本基本保持一致。注冊表以一個層次化的樹形結構組織,類似于文件系統中的文件夾和文件的結構。使用戶更方便地管理系統配置和應用程序設置。在NT 4.0中,更新了HKEY_CURRENT_CONFIG子樹以提供對硬件配置文件的支持。
1998年6月25日,微軟公司發布了Windows 98電腦操作系統。代碼處理注冊表的速度更快、更健壯,并且當出現某些問題時,操作系統能夠自動檢測和修復。同時,注冊表服務使用更少的實模式內存和保護模式記憶,具備更優秀的CPU緩存支持,縮短在注冊表中查找值所需的時間。這些優化措施使得Windows 98操作系統的性能有了明顯的提升。
2000年2月17日,微軟發布了Windows 2000操作系統。Windows 2000首次引入了注冊表事務日志的概念,以提高注冊表的可靠性。在Windows 2000中,寫入注冊表文件時可以使用事務日志。具體的實現方式是,在數據被寫入注冊表之前,將其存儲在事務日志中。如果由于鎖定或者其他原因導致無法直接寫入注冊表的活頁,那么系統會使用事務日志進行恢復。
2006年11月30日,微軟公司發布了Windows Vista操作系統。Windows Vista引入了注冊表虛擬化技術,這是一項應用程序兼容性技術。注冊表虛擬化使得具有全局影響的注冊表寫入操作可以重定向到每個用戶的位置。對于讀取或寫入注冊表的應用程序來說,這個重定向操作是透明的。
2009年10月,微軟發布了Windows 7的操作系統,其核心版本號為Windows NT 6.1。在Windows 7中,注冊表主要由“鍵”和“鍵值”構成,類似于我的電腦中的文件夾。同時,注冊表中記錄了用戶安裝在計算機上的軟件和每個程序的相關信息,通過它可以控制硬件、軟件、用戶環境和操作系統界面的數據信息文件。
2013年10月17日,微軟公司發布了Windows 8.1操作系統。Windows 8.1引入了新的注冊表事務日志格式,以提升系統的可靠性和性能。新的日志格式采用了環形緩沖區的工作方式,其中最老的數據將被新的數據覆蓋。每個日志條目都包括序列號和注冊表偏移量,從而能夠輕松確定寫入的順序和頁面位置。
2015年7月,微軟發布了Windows 10的操作系統。相較于早期版本的Windows,Windows 10的注冊表具有一些新的功能和改進。例如,如果用戶已更新了Windows 10 KB4571756或KB4566782補丁,則支持通過編輯注冊表開啟Windows1020H2中的一個全新功能。此外,還有一些實用但小眾的功能,如解除文件路徑長度限制等,這些功能只能通過編輯注冊表或組策略來開啟。
注冊表的結構
注冊表是一個分層數據庫。層次結構的頂部是用戶的計算機。在它下面,會發現主要的分支,被稱為“蜂巢”。這些配置單元中有注冊表項。項可以包含子項和注冊表值。鍵值有三種類型:String、Binary 或 DWORD。字符串是一行文本。二進制即表示為 1 和 0 的值。DWORD 是一個四字節數字。這些值通常用于存儲布爾值,因此 1 或 0 可以表示“啟用”和“禁用”。
分支結構
HKEY_CLASSES_ROOT
HKEY_CLASSES_root 通常簡稱為 HKCR,是 Windows 注冊表中的一個注冊表單元,包含文件擴展名關聯信息以及程序標識符 (ProgID)、類標識符 (CLSID) 和接口標識符 (IID) 數據。這個注冊表配置單元包含必要的信息,當用戶需要 Windows 執行某些操作時,它就會知道該怎么做,比如查看驅動器的內容或打開某種類型的文件等。
KEY_CLASSES_ROOT子樹包含兩種類型的數據:一種是與文件類型相關聯的數據,用于關聯文件類型與程序;另一種是用于配置COM對象、Visual Basic程序或其他自動化數據的數據。文件類型的子項與文件擴展名同名,如 .exe。文件類型關聯存儲在注冊表中,但更改它們應使用Windows資源管理器。而配置子項則使用程序ID或其他信息類作為父鍵,如COM、Visual Basic、自動化和腳本的信息類鑰匙,如CLSID、接口、TypeLib、AppId等。
HKEY_CURRENT_USER
HKEY_CURRENT_USER,經常縮寫為HKCU,是Windows注冊表中的幾個主要注冊表配置單元之一,也是Windows注冊表的重要組成部分。它包含Windows和特定于當前登錄用戶的軟件的配置信息。例如,位于該配置單元下的各種注冊表鍵中的各種注冊表值控制著諸如已安裝的打印機、桌面墻紙、顯示設置、環境變量、鍵盤布局、映射的網絡驅動器等用戶級設置。許多在控制面板中的小程序中配置的設置實際上都存儲在這個配置單元中。
HKEY_CURRENT_USER子樹僅存儲當前用戶子項的SID指針,并不直接包含數據。它提供對數據的更輕松訪問,每次用戶登錄時都會創建新的子樹,數據來自用戶的配置文件。如果沒有可用的配置文件,子樹將根據默認用戶的設置生成,這些設置存儲在系統驅動器中的Ntuser.dat文件中。
HKEY_LOCAL_MACHINE
HKEY_LOCAL_MACHINE,通常縮寫為HKLM,是組成Windows注冊表的幾個注冊表配置單元之一。該子樹包含有關本地計算機系統的信息,包括硬件和操作系統數據,如總線類型、系統內存、設備驅動程序和啟動控制參數。
HKEY_USERS
HKEY_USERS,有時被視為HKU,是Windows注冊表中的許多注冊表配置單元之一。它包含計算機上所有當前活動用戶的特定用戶配置信息。HKEY_USERS配置單元下的每個注冊表項都對應于系統上的一個用戶,并使用該用戶的安全標識符或SID命名。每個SID下的注冊表項和注冊表值控制該用戶的特定設置,如映射的驅動器、安裝的打印機、環境變量、桌面背景等,并在用戶首次登錄時加載。
HKEY_CURRENT_CONFIG
HKEY_CURRENT_CONFIG(HKCC)子樹并不直接包含數據,而是存儲指向當前硬件配置文件內容的指針,這些數據實際上位于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current子項中。HKCC提供了一個更便捷的訪問方式,使用戶能夠在任何位置查看和更改這些硬件配置信息。該子樹包含在運行時收集的信息,存儲在此鍵中的信息不會永久存儲在磁盤上,而是在啟動時重新生成。它是鍵“HKEY_LOCAL_MACHINESystemCurrentControlSetHardware ProfilesCurrent”的句柄,該鍵最初為空,但在啟動時通過加載存儲在“HKEY_LOCAL_MACHINESystemCurrentControlSetHardware Profiles”中的其他子鍵之一進行填充。
配置單元
配置單元是注冊表中鍵、子項和值的邏輯組,用于在操作系統啟動或用戶登錄時加載到內存中的支持文件。每個新用戶登錄計算機時,都會為其創建一個新的用戶配置文件配置單元,其中包含與用戶的應用程序設置、桌面、環境、網絡連接和打印機相關的特定注冊表信息。這些配置單元可以使用標準格式或最新格式的注冊表文件存儲,并存放在%SystemRoot%\system32\Config目錄中。其中,標準格式在Windows XP及更高版本的操作系統中仍被支持,而最新格式則在支持最新格式的Windows版本中使用。每次用戶登錄時,這些文件都會更新。
數據類型
每個值都可以存儲具有可變長度和編碼的任意數據,但這些數據與定義如何分析此數據的符號類型(定義為數值常量)相關聯。
注冊表存儲空間
應用程序在注冊表中存儲數據時,應遵循一些實用準則以提高系統效率。建議將配置和初始化數據存儲在注冊表中,而將其他類型的數據存儲在其他地方。超過一兩千字節的數據應存儲為文件,并使用注冊表中的鍵進行引用。此外,應將類似的數據分組為結構,并將結構存儲為值,以節省空間。在 Windows 操作系統中,注冊表文件的視圖映射到分頁池內存或計算機CPU緩存地址空間中,無論數據大小如何,費用不超過 4 MB。注冊表配置單元的最大大小為 2 GB,但系統配置單元除外。在某些版本的 Windows 中,盡管沒有顯式限制分頁池內存和磁盤空間中的配置單元可能占用的總空間量,但系統配額可能會影響實際的最大大小。從 Windows Server 2003 Service Pack 2 (SP2) 開始,注冊表配置單元的最大大小限制為 2 GB。
注冊表文件
注冊表文件記錄了用戶安裝在計算機上的軟件和每個程序的相互關聯信息,包括計算機的硬件配置,如自動配置的PnP的設備和已有的各種設備說明、狀態屬性以及各種狀態信息和數據。此外,注冊表也存放著各種參數,直接控制著Windows的啟動、硬件驅動程序的裝載以及一些Windows應用程序的運行,從而在整個系統中起著核心作用。應用程序可以使用一些特定的函數來將注冊表的一部分保存到文件中,并在需要時將文件的內容加載回注冊表。
注冊表函數
注冊表函數是Windows操作系統提供的一種用于處理注冊表的API,其功能豐富,包括檢索注冊表的注冊表函數是Windows操作系統提供的一種用于處理注冊表的API,其功能豐富,包括檢索注冊表的當前大小以及允許注冊表在系統上達到的最大大小,關閉指定注冊表項的句柄,與另一臺計算機上的預定義注冊表句柄建立連接,將指定的注冊表項及其值和子項復制到指定的目標鍵等。
編輯注冊表
注冊表編輯器
注冊表編輯器是Windows操作系統中的一個重要工具,用于查看和維護注冊表。注冊表是Windows操作系統中的一個核心數據庫,存放著各種系統參數和應用程序的設置信息。通過注冊表編輯器,用戶可以修改注冊表中的內容,以實現一些特定的功能,例如加快啟動速度、修改系統設置、修復系統問題等。
是否應該編輯注冊表:除非別無選擇,否則不要直接編輯注冊表。 注冊表編輯器會忽略標準的安全措施,從而使得這些設置可能降低性能、破壞系統,甚至要求用戶重新安裝 Windows。 用戶可以使用控制面板或 微軟 管理控制臺 (MMC) 中的程序安全地更改大多數注冊表設置。 如果必須直接編輯注冊表,請先進行備份。
reg 命令編輯注冊表
使用 reg 命令可以對注冊表項中的注冊表子項信息和值執行操作,可以查看或配置本地或遠程計算機上的注冊表項,但使用 reg 配置遠程計算機的注冊表會限制在某些操作中可以使用的參數,因此需要檢查每個操作的語法和參數,以確保它們可以在遠程計算機上使用。
使用腳本編輯注冊表
除了使用reg.exe 實用程序執行所有典型的注冊表操作。還有另一種選擇——Windows PowerShell。PowerShell 提供了大量工具,用于在本地計算機上或遠程與 Microsoft Windows 注冊表進行交互。
注冊表的局限性
Windows 注冊表的缺點包括遷移困難、單點故障的問題以及容易受到用戶惡意和無意損壞的風險。盡管通過事務日志和多級日志文件可以在一定程度上防止損壞和修復問題,但其集中式和分層結構仍使注冊表成為系統中的薄弱環節。因此,在使用注冊表時需要謹慎,并且定期進行備份是很重要的。
參考資料 >
Registry.microsoft.2023-11-22
注冊表的結構.Microsoft.2023-11-17
Windows 3.1 is officially 30 years old.windowscentral.2023-11-28
預定義密鑰.Microsoft.2023-11-17
注冊表層次結構.Microsoft.2023-11-23
What Is the Windows Registry?.lifewire.2023-11-30
Configure an Ini File Item.microsoft.2023-11-24
Unix Configuration File.fileinfo.2023-11-24
Happy 20th birthday, Windows NT 3.1: Microsoft's server outrider.theregister.2023-11-28
Editing the Windows NT Registry.itprotoday.2023-11-29
Windows 98 發布|歷史上的今天.騰訊網.2023-12-06
Chapter 31 - Windows 98 Registry. Windows 98 注冊表.2023-12-06
Remembering Windows 2000, Microsoft's Forgotten Masterpiece.howtogeek.2023-11-24
Just a moment....mandiant.2023-12-06
微軟Windows Vista.eyewated.2023-12-06
Registry Virtualization.microsoft.2023-12-06
微軟公布Win8.1正式版發布時間:10月17免費升.IT之家.2023-12-06
教你如何通過注冊表開啟 Win10 20H2 新功能,獲得全新開始菜單.IT之家.2023-11-29
最大路徑長度限制.microsoft.2023-11-29
HKEY.lifewire.2023-12-07
HKEY_CLASSES_ROOT.microsoft.2023-12-07
什么是HKEY_CURRENT_USER?.lifewire.2023-12-07
HKEY_CURRENT_USER.Microsoft.2023-11-17
HKEY_LOCAL_MACHINE.Microsoft.2023-11-17
HKEY_USERS (HKU Registry Hive).lifewire.2023-12-07
HKEY_CURRENT_CONFIG.Microsoft.2023-11-17
Understanding the Registry on Windows.uconn.2023-12-07
注冊表配置單元.Microsoft.2023-11-20
注冊表數據類型.microsoft.2023-11-30
注冊表存儲空間.Microsoft.2023-11-17
注冊表文件.Microsoft.2023-11-20
注冊表元素大小限制.Microsoft.2023-11-20
注冊表函數.Microsoft.2023-11-20
使用 64 位版本的 Windows 查看系統注冊表.microsoft.2023-11-30
Hotfix information for Windows Server 2003.Microsoft支持.2023-11-30
Overview of the Windows Registry.Microsoft.2023-11-23
How to Back Up the Windows Registry.lifewire.2023-11-22
如何添加、更改和刪除注冊表項和值.lifewire.2023-11-22
reg 命令.microsoft.2023-12-07
如何使用 PowerShell 獲取、編輯、創建和刪除注冊表項.netwrix.2023-12-07
Windows 注冊表 - 缺點.liquisearch.2023-12-07