首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 登錄結構深度解析:NT 系統五大根鍵功能與子鍵詳細說明

     編輯:關於C++

前言:登錄是 Windows 的中樞神經

Windows Registry (登錄) 是分層式資料庫,儲存作業系統核心設定、硬體配置、驅動程式參數、使用者偏好、應用程式設定。理解其結構對系統管理、應用程式開發、故障排除、安全稽核至關重要。本文針對 Windows NT 系列 (NT 4.0 / 2000 / XP / 2003 / Vista / 7 / 8 / 10 / 11) 詳細解析五大根鍵 (Root Keys) 及其關鍵子鍵功能。

五大根鍵總覽

根鍵 (HKEY)用途備註
HKEY_CLASSES_ROOT (HKCR)檔案關聯、COM 類別註冊、OLE 物件、殼擴充HKLM\Software\Classes + HKCU\Software\Classes 合併視圖
HKEY_CURRENT_USER (HKCU)當前登入使用者設定 (桌面、環境、網路、應用程式偏好)對應 %USERPROFILE%\NTUSER.DAT,使用者登出卸載
HKEY_LOCAL_MACHINE (HKLM)電腦層級設定 (硬體、驅動、服務、軟體、安全、系統啟動)儲存於 %SystemRoot%\System32\config\ 下多個 Hive 檔
HKEY_USERS (HKU)所有載入使用者設定檔的容器包含 .DEFAULT (新用戶範本) + 各用戶 SID 子鍵
HKEY_CURRENT_CONFIG (HKCC)當前硬體設定檔 (顯示、印表機等) 快速存取視圖指向 HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current

註: HKEY_DYN_DATA 僅存在於 Win9x/Me (動態硬體資訊),NT 系列為空或不存在。

深度剖析:HKEY_LOCAL_MACHINE (HKLM) — 系統核心

HKLM 是最複雜、最關鍵的根鍵,包含五大核心子鍵:

1. HARDWARE — 硬體偵測快照 (非持久化)

  • 每次開機由 NTLDR/核心/HAL 重建,**不寫入磁碟**。
  • 關鍵子鍵:
    • DESCRIPTION\System\CentralProcessor:CPU 型號、頻率、特性。
    • DESCRIPTION\System\FloatingPointProcessor:FPU 資訊。
    • DESCRIPTION\System\Multiprocessor:多處理器設定。
    • DEVICEMAP:序列埠、平行埠、滑鼠、鍵盤裝置對應。
    • RESOURCEMAP:IRQ、I/O 連接埠、記憶體、DMA 通道分配表。
  • 用戶修改**無效果**,重開機即還原。

2. SAM (Security Account Manager) — 安全帳戶資料庫

  • 儲存本機使用者/群組帳戶、密碼雜湊 (LM/NT Hash)、安全策略 (密碼長度、鎖定門檻)。
  • **極高權限保護**:預設僅 SYSTEM 帳戶可讀寫,管理員也無法直接開啟 (RegEdit 顯示「拒絕存取」)。
  • 管理工具:lusrmgr.msc、net user、SAM API (NetUserAdd 等)。
  • 離線攻擊風險:實體存取可複製 %SystemRoot%\System32\config\SAM 檔案破解雜湊,**務必啟用 BitLocker/SysKey**。

3. SECURITY — 本地安全性原則與審計

  • 包含:使用者權利指派 (User Rights Assignment)、密碼原則、稽核原則、信任關係、SAM 複本。
  • 同樣受 SYSTEM 專屬保護,一般編輯器不可存取。
  • 管理工具:secpol.msc (本地安全性原則)、gpedit.msc (群組原則)。

4. SOFTWARE — 應用程式與系統軟體設定

  • 最常被開發者/高階用戶操作的區域。
  • 結構:HKLM\Software\廠商名\產品名\版本\。
  • 關鍵內容:
    • 安裝路徑、版本號、授權金鑰。
    • MRU (Most Recently Used) 清單。
    • COM 元件註冊 (舊版,現多用 HKCR\CLSID)。
    • 服務參數 (部份服務自建子鍵)。
    • Windows 核心元件設定:Microsoft\Windows\CurrentVersion (Run/RunOnce、App Paths、Uninstall、Explorer 設定)。
  • 64 位元系統:32 位元應用程式寫入會被重導向至 HKLM\Software\WOW6432Node\ (Registry Reflection)。

5. SYSTEM — 核心系統組態 (開機關鍵)

  • 儲存於 %SystemRoot%\System32\config\SYSTEM。
  • 關鍵結構:
    • CurrentControlSet (符號連結 → ControlSet001 等):**目前啟動使用的控制集**。
    • ControlSet001, ControlSet002...:多組控制集支援「上次正確配置」(LKGC)。
    • Select:Current, Default, Failed, LastKnownGood 指向控制集編號。
  • CurrentControlSet\Control:核心參數 (Session Manager、檔案系統、電源管理、時間)。
  • CurrentControlSet\Services:**所有驅動程式與服務**的註冊資訊 (ImagePath, Start, Type, ErrorControl, DependOnService, Parameters...)。
  • CurrentControlSet\Enum:PnP 列舉裝置樹 (PCI, USB, ACPI...)。

HKEY_CURRENT_USER (HKCU) — 使用者個人化領域

  • 對應載入的使用者設定檔 NTUSER.DAT。
  • 主要子鍵:
    • Software:使用者層級應用程式設定 (優先於 HKLM)。
    • Control Panel\Desktop:桌面背景、螢幕保護、滑鼠速度、鍵盤重複率。
    • Network:對應網路磁碟機持久連線。
    • Printers:列印偏好、預設印表機。
    • Environment:使用者環境變數 (擴充後合併至進程環境區塊)。
    • Volatile Environment:登入時動態建立 (LogonServer, SessionName 等)。
  • 漫遊設定檔:網域環境下 NTUSER.DAT 同步至伺服器,跨電腦保持一致。

HKEY_CLASSES_ROOT (HKCR) — 殼與 COM 橋樑

  • 合併視圖:HKLM\Software\Classes (機器級) + HKCU\Software\Classes (使用者級,優先)。
  • 核心功能:
    • 檔案關聯: .txt → txtfile → shell\open\command。
    • ProgID/CLSID 對應: CLSID\{GUID}\InprocServer32 指向 DLL 路徑。
    • 殼擴充: Context Menu, Property Sheet, DragDrop, Icon Handler 等註冊於 CLSID 或 ProgID\shellex。
    • MIME/協定處理: MIME\Database\Content Type, PROTOCOLS\Handler。

HKEY_USERS (HKU) & HKEY_CURRENT_CONFIG (HKCC)

  • HKU: 所有已載入使用者設定檔的根節點。包含 .DEFAULT (系統預設/新用戶範本/登入畫面設定) + S-1-5-21-... (User SID)。服務若以使用者身分執行,其 HKCU 即對應此處對應 SID 子鍵。
  • HKCC: 僅為 HKLM\SYSTEM\CurrentControlSet\Hardware Profiles\Current 的便捷捷徑,提供當前硬體設定檔 (顯示解析度、印表機、停駐狀態) 的快速讀寫。筆電切換停駐站時即更新此處。

開發者實務操作指南 (C++ / Delphi / C# / PowerShell)

操作Win32 API.NET (C#)PowerShell
開啟鍵RegOpenKeyExRegistryKey.OpenBaseKey / OpenSubKeyGet-Item / Get-ChildItem
讀取值RegQueryValueExGetValue / GetValueKindGet-ItemProperty
寫入值RegSetValueExSetValueSet-ItemProperty / New-ItemProperty
建立鍵RegCreateKeyExCreateSubKeyNew-Item
刪除鍵/值RegDeleteKey/ValueDeleteSubKeyTree / DeleteValueRemove-Item / Remove-ItemProperty
64/32 位元視圖KEY_WOW64_64KEY / 32KEYRegistryView.Registry64 / Registry32Get-Item -View Registry64

常見故障排除與安全稽核重點

  • 啟動項檢查: HKLM\Software\Microsoft\Windows\CurrentVersion\Run/RunOnce, HKCU\...\Run/RunOnce, HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices/RunServicesOnce、Winlogon\Userinit/Shell、Services (HKLM\SYSTEM\CurrentControlSet\Services)。
  • 映像劫持 (Image File Execution Options): HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\app.exe\Debugger 被惡意軟體濫用攔截執行。
  • AppInit_DLLs: HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs (需啟用 LoadAppInit_DLLs=1),全域 DLL 注入機制,常被 Rootkit 濫用。
  • 安全權限稽核: 使用 RegEdit → Permissions 或 Get-Acl 檢查敏感鍵 (SAM, SECURITY, Services, Run) 是否被非預期主體修改。
  • 註冊表虛擬化: Vista+ UAC 將無權寫入 HKLM\Software 的舊版應用寫入重導向至 HKCU\Software\Classes\VirtualStore\Machine\Software\,造成設定「寫入成功但讀不到」假象。

結語

Windows 登錄雖非關係式資料庫,但其嚴謹的分層結構、權限模型、事務支援 (Vista+ Kernel Transaction Manager) 使其成為系統組態中樞。熟悉五大根鍵職掌、HKLM 五大子鍵細節、64/32 位元重導向、虛擬化機制,是 Windows 系統工程師、安全研究員、應用程式開發者的必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved