iT邦幫忙

2021 iThome 鐵人賽

DAY 4
0
Software Development

妄想對自己的Windows優化兼Debug的工程師很正常吧系列 第 4

登錄檔的五大根鍵--設計結構的sense

在上一篇,我們介紹了登錄檔的結構和物理位置,現在你意識到他的存在,那今天就是接續前一篇最後的預告,我們要來研究幾個重要登錄檔分支的意義,這樣才會對他熟悉一些,大概可以猜測要找的登錄值會在哪裡,你才會有點略懂略懂的sense,那麼以下就開始囉!


登錄檔的分支

上篇提到,我們所看到的五個根鍵(偶爾也稱子樹),實際上是HKEY_LOCAL_MACHINE和HKEY_USERS所構成,接下的內容根據英文名稱你仔細想一下可以猜出他安排的合理性,我們知道這些分支中一筆筆的登錄值才是最後實際影響系統的資料,鍵的主要功能是協助分類,現在我們就Win+R,輸入regedit,開啟登錄編輯程式來對看看!


1. HKEY_LOCAL_MACHINE (HKLM)

是登錄檔的核心主鍵,所有軟體、硬體及Windows的工作設定都存放在這裡,包括系統安全設定原則、使用者許可權和共用資訊、BIOS、硬體周邊、作業系統資訊、軟體設定資料及位置和版本號等等,這些設定通常跟使用者無關,是公共配置資訊,針對使用此系統的所有使用者。HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG的資訊會在電腦啟動時跟這裡做比對檢查。
Imgur
下面對一一解釋這些子鍵:

  • HKLM\BCD00000000:BCD是Boot Configuration Data,啟動配置數據,取代了以往的boot.ini,網路上有人示範把他給刪了然後Windows就無法啟動了。

  • HKLM\HARDWARE:在每次系統啟動和執行硬件檢測時創建,如之前提到,他的資訊會儲存在RAM中,子鍵的層次結構儲存電腦所有的硬體元件資訊,包括了系統使用的浮點處理器、串列埠等資訊。

    • ACPI:存放高階電源管理介面資料
    • DEVICEMAP:用於存放裝置設備的對映
    • DESCRIPTION:存放系統資訊
    • RESOURCEMAP:用於存放資源列表
    • UEFI:存放統一可延伸韌體介面的資訊
  • HKLM\SAM:安全帳戶管理器(SAM)的資料庫,包括帳戶密碼和使用者訪問資料夾,檔案以及外設的許可權等,通常顯示為空。

  • HKLM\SECURITY:安全性設定資訊,儲存安全策略和使用者組策略的配置資訊,通常顯示為空。

  • HKLM\SOFTWARE:安裝的軟體資訊和設定,包括配置生效的設定、版本號等,各個軟體的控制資訊分別安裝在相應的子鍵中,主要由應用程序和系統安裝程序修改,這裡你會發現一個叫Wow6432Node,他牽涉到我們64和32位元的大亂鬥中,筆者之後講資料夾意義的時候再補充說明。

  • HKLM\SYSTEM:控制作業系統啟動和修復的資訊,包含有關Windows系統的設置資料,底下有許多子鍵操控各種系統配置,其中CurrentControlSet是在系統啟動時動態鏈接到本機的ControlSet001複製過來的。


2. HKEY_CLASSES_ROOT (HKCR)

這個根鍵記錄的是Windows作業系統中所有資料檔案的資訊內容,主要記錄了不同檔案的副檔名和與之相對應的應用程式,也就是決定什麼類型的檔案預設要用什麼程式開啟這回事,內容包括啟動應用程式所需的全部資訊,像是副檔名,應用程式與文件之間的關係,驅動程式名,DDE和OLE資訊,類ID編號和應用程式跟文件的圖示等等,所以當你展開後會看到很多子鍵,他主要分成已註冊的各類檔案副檔名和各類檔案型別的資訊。

然後這個鍵等於HKLM\Software\Classes,但在HKEY_CURRENT_USER\Software\Classes也有一樣功能,你可以從名稱輕易了解,他是當前使用者的設置跟本機設置的關係,兩個設置可能有衝突的設定,這時候使用者自定義的設置的優先級當然比較高,所以我們說,HKCU\Software\Classes會優先於HKLM\Software\Classes,而通常的我們要改寫設定也是改寫HKCU下的。

我們舉個例子,例如我們想找關於系統遇到.txt檔案時的情況,就轉到HKCR\txtfile目錄,你會看到預設值告訴系統這是一份文字文件,其他屬性筆者其實看不太懂,留下官方說明給大家參考:
https://docs.microsoft.com/zh-tw/windows/win32/shell/fa-progids
Imgur

然後像是HKRT\txtfile\shell\open\command的預設值你就可以看出,有個open txtflie的線索,然後資料欄指NOTEPAD.EXE(記事本)這支程式的絕對路徑,實際上這串登錄值的意義就是,在.txt檔雙擊直接開啟的程式使用的是記事本,後面的%1代表啟用這項登錄值的意思。
Imgur


3. HKEY_CURRENT_CONFIG (HKCC)

表示電腦目前的硬體配置資訊,實際上是個快捷指標,他等於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current。


4. HKEY_USERS (HKU)

他儲存所有使用者配置,包括預設使用者(DEFAULT)也就是新建立使用者的預設配置,和當前登入使用者的配置,配置的內容包括桌布,字體,控制台選項,音效,網路連線,開始功能表等,如果打開一看你可能會看到多個安全標識符(SID)表示不同用戶,通常當前使用者會是S-1-5-18,其他用戶代表各位可以轉到官方的doc瞧瞧。
https://docs.microsoft.com/en-US/troubleshoot/windows-server/identity/security-identifiers-in-windows
Imgur


5. HKEY_CURRENT_USER (HKCU)

就是當前用戶的設定資訊,他等於”HKU\當前用戶的SID”,修改這裡的登錄值可以做一些個人化配置,但建議大家還是用Windows提供的各種設定介面去更改才是比較安全的做法。下面介紹一些子鍵的內容:

  • HKCU\AppEvents:應用事件的列表
  • HKCU\Console:控制台子系統儲存設定
  • HKCU\Control Panel:包括內容與桌面、游標、鍵盤和滑鼠等設定有關
  • HKCU\Environment:環境變數設定
  • HKCU\Keyboaed Layout:鍵盤的佈局,包含硬體和驅動器設定
  • HKCU\Printers:印表機上的相關資訊,包括使用者設定的配置選項
  • HKCU\SOFTWARE:儲存當前使用者的應用程式設定和程式變數

以上是我們登錄檔的意義,也帶了幾個簡單的例子,筆者希望可以先從理解意義,從幾個關鍵字自己推出他的意思,這樣的學習應該比較啟發式,至於下一篇我們來談談登錄值的格式還有.reg檔的意義,以及登錄檔的備份,這些都談完,我想差不多就可以來來嘗試危險的事了呵呵(這裡是指改機碼的部分)

Imgur
可參考:https://www.quora.com/If-I-were-a-super-skilled-coder-how-long-would-it-take-me-to-write-the-Windows-10-operating-system

參考資料:
https://tphcc.ebook.hyread.com.tw/bookDetail.jsp?id=11615 (電子書)
https://iter01.com/515763.html
https://www.itread01.com/content/1546069686.html
https://en.wikipedia.org/wiki/Windows_Registry
https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E8%A1%A8
https://docs.microsoft.com/en-us/windows/win32/sysinfo/predefined-keys
https://www.itread01.com/content/1546837203.html
https://www.itread01.com/content/1549298535.html


上一篇
登錄檔結構和物理位置--一顆四處散落的tree
下一篇
登錄檔的資料格式與.reg檔的介紹--各種REG的亂鬥
系列文
妄想對自己的Windows優化兼Debug的工程師很正常吧30

尚未有邦友留言

立即登入留言