iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
Software Development

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

登錄檔結構和物理位置--一顆四處散落的tree

在上一篇我們了解登錄檔的意義和由來後,這裡要開始解說他的形式了
再次提醒,沒有十足的把握請勿做新增修改刪除的動作~

首先各位用Win+R的起手式,輸入regedit,執行登錄編輯程式,映入眼簾的會看到五大項,分別為HKEY_CLASSES_ROOT(HKCR)、HKEY_CURRENT_USER(HKCU)、HKEY_LOCAL_MACHINE(HKLM)、HKEY_USERS(HKU)、HKEY_CURRENT_CONFIG(HKCC),括號後是他們名稱的縮寫,你點點看後可能會感覺到,每個資料夾下可能有子資料夾,子資料夾和到最後一個資料夾時旁邊可能會出現一些條目,你大概可以想像,這就是我們前面提到的,登錄檔是一個樹狀分層結構的資料庫系統,下面就來分享如何理解這玩意兒。
Imgur


登錄檔基礎結構

登錄檔包含兩個基本元素:鍵(key)和值(value),鍵就是你看到的資料夾,值就是旁邊條目,實際上我們常說登錄檔由:
Key(鍵、項、機碼) -> subkey(子鍵、子項、子機碼) -> value(值、登錄值、值項)
所構成(中文翻譯多樣化所以看英文準一些)

你可以單純點的想像他就是一顆tree,一個鍵就是樹狀資料結構中的一個節點,而子鍵就是這個節點的子節點,值就像葉節點,但是子節點裡也可以有值(資料結構有學好的話他其實就是一顆B-tree),在路徑表達上我們用反斜線指示層次結構的級別。然後鍵後面可以接多個子鍵也可以接多個值,子鍵也是鍵而且至少包含一個預設值,鍵的名稱不帶反斜線也不區分大小寫。下面做幾個名詞解釋:

  • RootKey(根鍵、根項、根機碼):以HKEY開頭的鍵,某一項的控制程式碼項,有人說是”到鍵的控制代碼”的意思,Windows handles(H) to keys(KEY)的縮寫。

  • Branch(分支):更專業一點我們稱做Hive,他表示一個特定子鍵及其所包含的一切,說明一個key和他的所有內容。

  • Value(值、登錄值、值項):影響系統的實際資料,帶有一個名稱和一個值的有序值,每個鍵可包括任意數量的值,值由三個部分組成:名稱、資料類型和資料。名稱是不包括反斜線的字元、數字、代表符號和空格的任意組合。同一鍵中不可有相同的名稱;資料類型包括字串、二進位制和雙位元組等;資料是Value的具體值,它的大小可以佔用64KB。如果值沒有名稱我們稱他為預設值(Default Value),每個鍵都會包括這個值,他的資料類型會是字串值。


登錄檔的一級分支

在第一層我們可以看到有五個根鍵,實際上只劃分為兩大項,一是HKEY_LOCAL_MACHINE,其中包括HKEY_CLASSES_ROOT及HKEY_CURRENT_CONFIG,二是HKEY_USERS,其中包括HKEY_CURRENT_USER,你可以他只是一種貼心的設計,才特別把幾個重要的分支提出來當根鍵。

本來預計要來一一解說各分支的意義但是時間一下子就飛逝了,看來筆者進度落後(才第三天而已吧……),想說這邊就放上一張維基百科的解說:

Imgur
就這樣帶過……怎麼可能呢!裡頭的分項所包含的意義都要涉略,以後才可以自己看懂呀,就因為如此,篇幅太長,筆者在此決定下篇再講,這裡就先解決上一篇的問題,我們的登錄檔的physically location究竟在哪?


登錄檔的物理實體文件位置

其實先前提到的System.dat和User.dat在Windows演化中,最後也被拆成數個文件了,這些登錄檔文件(有時我們稱Hive)多數存在%SystemRoot%system32/config的資料夾中,微軟的官方文件中也有對此說明,他們的檔案格式也不限於.dat檔,另外在%USERPROFILE%( C:\Users\使用者名稱)下也有Ntuser.dat的檔案也是登錄檔。這個NT是只是Windows NT的意思,就像是今天一直覺得64位元的Win 10登錄檔怎麼可能會在system32的資料夾中,一直覺得應該放在資料夾名稱帶有64的像是sysWOW64之類的,最後查到那也是電腦演變留下的慣例,就像第一篇冷知識寫的現在沒有AB槽的原因一樣,這也就是為什麼我之後想撥個幾天寫系統資料夾意義關係的原因。

Imgur

如果要看到這些文件,在Windows檔案總管中要勾選顯示隱藏的項目,再取消勾選隱藏保護的作業系統檔,筆者在此也推薦使用Everything,一套快速找查NTFS磁碟檔案的程式,當你發現你有堅持要找檔案就是找不到的時候,應該就會知道這套軟體的存在了。
Imgur

不過實際的登錄檔不只這些,有個密技可以讓你找到總列表,而這個列表就是在一個子鍵下的登錄值們,你可以用登錄編輯程式瀏覽到以下位置也當作是今天的練習:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\HiveList

Imgur
你會驚訝地發現零零散散的登錄檔這裡已經幫你統整好,每筆登錄值的資料就是每個HIV文件路徑,想當初我還對了一堆網站看到底還漏了哪個檔,原來找這裡就好了!這個知識是來自https://www.thewindowsclub.com/ 網站的議題,甚至上面還有教學影片,大家有興趣的話可以看看下方的參考資料。

不過說到這裡不知道你沒有發現……
什麼?HKEY_LOCAL_MACHINE\HARDWARE沒有路徑資料!
這是因為有些登錄檔是不穩定,而且沒有對應的文件,在每次系統啟動時才加載到RAM當中去管理,所以這些登錄檔是暫時性的,被稱為Volatile hive。

好的,以上就是今天的內容,下篇會一一分析一些重要的Key所代表的意義。

Imgur

參考資料:
https://tphcc.ebook.hyread.com.tw/bookDetail.jsp?id=11615 (電子書)
https://iter01.com/515763.html
https://en.wikipedia.org/wiki/Windows_Registry
https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E8%A1%A8
https://www.thewindowsclub.com/where-are-the-windows-registry-files-located-in-windows-7
https://superuser.com/questions/111311/where-are-registry-files-stored-in-windows


上一篇
登錄檔是什麼~資工的講古時間
下一篇
登錄檔的五大根鍵--設計結構的sense
系列文
妄想對自己的Windows優化兼Debug的工程師很正常吧30

尚未有邦友留言

立即登入留言