登录档结构和物理位置--一颗四处散落的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


<<:  Day-11 其名为超级、於新电视再起的二代霸主超级任天堂

>>:  D12 - 如何用 Apps Script 寄出客制化的表单并搜集分散在 Google Sheet 中的回应?(二)大幅度客制你的 Google Form

IT铁人DAY 29-Template Method 模板模式

  今天要要介绍最後一个 Behavioral Patterns,也就是Template Metho...

[Day5] Vite 出小蜜蜂~ Component 元件!

Day5 写程序写到一定的阶段後,会开始发现,其实做出想要的功能并不困难。 真正难的,其实是如何写出...

18. 解释 JSONP 如何运作

(其实现在应该很少使用JSONP了,只是跟上一篇比较有关所以顺便整理,简单了解一下就好。) JSON...

Day-10 heap与heap sort

Heap Heap(堆积)是一个阵列,可以把它看作类似完全二元树(也就是按照顺序排放的树)。 p.s...