什么是 Windows 注册表及其工作原理?

Windows注册表(Registry)是 Windows 应用程序以及 Windows 操作系统的配置、值和属性的集合,它以分层方式组织和存储在单一存储库中。

每当在Windows系统中安装新程序时,都会在(Windows)Windows 注册表(Windows Registry)中创建一个条目,其中包含其大小、版本、存储位置等属性。

什么是 Windows 注册表及其工作原理

因为,此信息已存储在数据库中,不仅操作系统知道所使用的资源,其他应用程序也可以从此信息中受益,因为它们知道如果某些资源或文件要共同使用可能出现的任何冲突存在。

什么是Windows 注册表(Windows Registry)及其工作原理(How)

Windows 注册表(Windows Registry)确实是Windows工作方式的核心。它是唯一使用这种中央注册表方法的操作系统。如果我们想象一下,操作系统的每个部分都必须与Windows 注册表(Windows Registry)交互,从引导顺序到重命名文件名这样简单的事情。

简单地(Simply)说,它只是一个类似于图书馆卡片目录的数据库,其中注册表中的条目就像存储在卡片目录中的一叠卡片。注册表项将是一张卡片,而注册表值将是写在该卡片上的重要信息。Windows操作系统使用注册表来存储大量用于控制和管理我们的系统和软件的信息。这可以是从 PC 硬件信息到用户首选项和文件类型的任何内容。我们对Windows系统所做的(Windows)几乎(Almost)任何形式的配置都涉及编辑注册表。

Windows 注册表的历史

Windows的初始版本中,应用程序开发人员必须在单独的 .ini 文件扩展名中包含可执行文件。此 .ini 文件包含给定可执行程序正常运行所需的所有设置、属性和配置。然而,由于某些信息的冗余,这被证明是非常低效的,并且它也对可执行程序构成了安全威胁。因此,标准化、集中化和安全技术的新实施显然是必要的。

随着Windows 3.1的出现,这种需求的一个基本版本通过一个称为Windows 注册表(Windows Registry)的所有应用程序和系统通用的中央数据库来满足。

然而,这个工具非常有限,因为应用程序只能存储可执行文件的某些配置信息。多年来,Windows 95 和Windows NT在此基础上进一步发展,在较新版本的Windows Registry中引入了集中化作为核心功能。

也就是说,将信息存储在Windows 注册表(Windows Registry)中是软件开发人员的一种选择。因此,如果软件应用程序开发人员要创建可移植应用程序,他不需要向注册表添加信息,可以创建并成功交付具有配置、属性和值的本地存储。

Windows 注册表(Windows Registry)与其他操作系统的相关性

Windows是唯一使用这种中央注册表方法的操作系统。如果我们想象一下,操作系统的每个部分都必须与Windows 注册表(Windows Registry)交互,从引导顺序到重命名文件名。

所有其他操作系统(如 iOS、Mac OSAndroidLinux )继续使用文本文件作为配置操作系统和修改操作系统行为的一种方式。

在大多数Linux变体中,配置文件以.txt格式保存,当我们必须使用文本文件时,这会成为一个问题,因为所有.txt文件都被视为关键系统文件。因此,如果我们尝试在这些操作系统中打开文本文件,我们将无法查看它。这些操作系统试图隐藏它作为一种安全措施,因为所有系统文件,如网卡、防火墙、操作系统、图形用户界面、视频卡接口等的配置都以ASCII 格式保存。(ASCII format.)

为了规避这个问题,macOS 和 iOS 都通过实现.plist 扩展名(.plist extension)部署了一种完全不同的文本文件扩展名方法,其中包含所有系统和应用程序配置信息,但仍然具有单一注册表的好处。胜过文件扩展名的简单更改。

Windows 注册表(Windows Registry)有什么好处?

因为操作系统的每个部分都在不断地与(Every)Windows 注册表(Windows Registry)通信,所以它必须存储在非常快的存储空间中。因此(Hence),该数据库专为极快的读取和写入以及高效的存储而设计。

如果我们要打开并检查注册表数据库的大小,它通常会徘徊在 15 到 20 兆字节之间,这使得它足够小,可以始终加载到RAM随机存取存储器(Random Access Memory))中,顺便说一下,这是可用的最快存储空间操作系统。

由于注册表需要始终加载到内存中,如果注册表的大小很大,则不会为所有其他应用程序顺利运行或根本运行留下足够的空间。这将不利于操作系统的性能,因此Windows 注册表(Windows Registry)的设计核心目标是高效。

如果有多个用户与同一设备交互,并且他们使用的应用程序很多,那么重新安装相同的应用程序两次或多次将浪费相当昂贵的存储空间。Windows注册表在应用程序配置在不同用户之间共享的这些场景中表现出色。

这不仅减少了使用的总存储空间,而且还允许其用户从一个交互端口更改应用程序的配置。这也节省了时间,因为用户不必手动访问每个本地存储.ini文件。

多用户(Multi-User)场景在企业设置中非常常见,这里非常需要用户权限访问。由于并非所有信息或资源都可以与所有人共享,因此通过集中式 Windows 注册表轻松实现了基于隐私的用户访问需求。在此,网络管理员保留根据所承担的工作拒绝或允许的权利。这使得单一数据库具有通用性,也使其变得强大,因为可以在远程访问网络中多个设备的所有注册表的同时进行更新。

Windows 注册表如何工作?

在开始动手之前,让我们先了解一下Windows 注册表(Windows Registry)的基本元素。

Windows 注册表(Windows Registry)由两个称为注册表(Registry Key)项的基本元素组成,它是一个容器对象,或者简单地说,它们就像一个文件夹,其中存储了各种类型的文件,而注册表值(Registry Values)是非容器对象,类似于文件可以是任何格式。

您还应该知道:(You should also know:) 如何完全控制或拥有 Windows 注册表项(How to Take Full Control or Ownership of Windows Registry Keys)

如何访问 Windows 注册表?

我们可以使用注册表编辑器(Registry Editor)工具访问和配置Windows 注册表, (Windows Registry)Microsoft包括一个免费的注册表编辑实用程序及其Windows 操作系统(Windows Operating System)的每个版本。

可以通过在命令提示符中键入“Regedit”或在“(Command Prompt)开始(Start)”菜单的搜索或运行框中键入“Regedit”来访问此注册表编辑器。(Registry Editor)这个编辑器是访问Windows注册表的门户,它可以帮助我们探索和更改注册表。注册表是位于Windows(Windows)安装目录中的各种数据库文件使用的总称。

如何访问注册表编辑器

在命令提示符下运行 regedit shift + F10

编辑注册表编辑器是否安全?(Is it Safe to edit Registry Editor?)

如果您不知道自己在做什么,那么在注册表(Registry)配置中玩耍是很危险的。每当您编辑注册表(Registry)时,请确保您遵循正确的说明,并且只更改您被指示更改的内容。

如果您有意或无意地删除了Windows 注册表(Windows Registry)中的某些内容,那么它可能会改变您的系统配置,从而导致蓝屏(Blue Screen)死机(Death)Windows无法启动。

因此,通常建议在对其进行任何更改之前备份 Windows 注册表。(backup Windows Registry)您还可以创建一个系统还原点(create a system restore point)(自动备份注册表(Registry)),如果您需要将注册表(Registry)设置恢复正​​常,可以使用该还原点。但是,如果您只按照您被告知的内容进行操作,那应该没有任何问题。如果您需要知道如何恢复 Windows 注册表,那么本教程(restore Windows Registry then this tutorial)将解释如何轻松完成此操作。

让我们探索一下Windows 注册表的结构(Windows Registry)

在一个无法访问的存储位置中存在一个用户,该位置仅用于操作系统的访问。

这些密钥(Keys)在系统引导阶段加载到RAM中,并在特定时间间隔内或发生特定系统级事件时不断进行通信。

这些注册表项的一部分存储在硬盘中。这些存储在硬盘中的密钥称为配置单元。注册表的这一部分包含注册表项、注册表子项和注册表值。根据授予用户的权限级别,他将访问这些密钥的某些部分。

注册表中以HKEY开头的处于层次结构顶峰的键被视为配置单元。

Editor中,当查看所有键而不展开时,配置单元位于屏幕左侧。这些是显示为文件夹的注册表项。

让我们探索一下 Windows 注册表项及其子项的结构:

键名示例 – “HKEY_LOCAL_MACHINESYSTEMInputBreakloc_0804”

这里的“loc_0804”指的是子键“Break”指的是子键“Input”,它指的是HKEY_LOCAL_MACHINE根键的子键“SYSTEM”。

Windows 注册表中的通用根键(Common Root Keys in Windows Registry)

以下每个键都是其自己的单独配置单元,其中包含顶级键中的更多键。

一世。HKEY_CLASSES_ROOT

这是Windows 注册表(Windows Registry)的注册表配置单元,由文件扩展名关联信息、程序标识符(programmatic identifier)( ProgID )、接口 ID(Interface ID) ( IID ) 数据和类 ID (CLSID)(Class ID (CLSID))组成。

此注册表配置单元  HKEY_CLASSES_ROOT是在(HKEY_CLASSES_ROOT)Windows操作系统中发生的任何操作或事件的网关。假设(Suppose)我们要访问Downloads文件夹中的一些 mp3 文件。操作系统通过它运行它的查询以采取所需的操作。

在您访问HKEY_CLASSES_ROOT(HKEY_CLASSES_ROOT)配置单元的那一刻,看到如此庞大的扩展文件列表真的很容易不知所措。但是,这些正是使 Windows 流畅运行的注册表项

以下是HKEY_CLASSES_ROOT配置单元注册表项的一些示例,

HKEY_CLASSES_ROOT\.otf
HKEY_CLASSES_ROOT\.htc
HKEY_CLASSES_ROOT\.img
HKEY_CLASSES_ROOT\.mhtml
HKEY_CLASSES_ROOT\.png
HKEY_CLASSES_ROOT\.dll

每当我们双击并打开一个文件,比如说一张照片,系统就会通过HKEY_CLASSES_ROOT发送查询,其中清楚地给出了请求此类文件时要做什么的说明。所以系统最终会打开一个显示请求图像的照片查看器。

在上面的示例中,注册表调用了存储在HKEY_CLASSES_ROOT\.jpg键中的键。HKEY_CLASSES_ROOT配置单元是在(HKEY_CLASSES_ROOT)HKEY_LOCAL_MACHINE配置单元 ( HKEY_LOCAL_MACHINE\Software\Classes ) 和 HKEY_CURRENT_USER配置单元 ( HKEY_CURRENT_USER\Software\Classes ) 中找到的集合数据。因此,当注册表项存在于两个位置时,它会产生冲突。因此在HKEY_CURRENT_USER\Software\Classes中找到的数据用于HKEY_CLASSES_ROOT。可以通过打开屏幕左侧的HKEY_CLASSES键来访问它。(HKEY_CLASSES)

ii. HKEY_LOCAL_MACHINE

这是存储特定于本地计算机的所有设置的几个注册表配置单元之一。这是一个全局密钥,其中存储的信息不能被任何用户或程序编辑。由于(Due)这个子键的全局性,存储在这个存储中的所有信息都是以虚拟容器的形式在RAM上连续运行的。HKEY_LOCAL_MACHINE中已经安装了软件用户的大部分配置信息,而Windows操作系统本身则被占用。当前检测到的所有硬件都存储在HKEY_LOCAL_MACHINE配置单元中。

还知道如何:(Also know how to:) 通过注册表搜索时修复 Regedit.exe 崩溃(Fix Regedit.exe Crashes when searching through Registry)

此注册表项进一步分为 7 个子项:(This registry key is further divided into 7 sub-keys:)

1. SAM安全帐户管理器(Security Accounts Manager))——它是一个注册表项文件,以安全格式(LM 哈希和NTLM哈希)存储用户的密码。哈希函数是一种用于保护用户帐户信息的加密形式。

它是一个锁定的文件,位于系统中的 C:WINDOWSsystem32config,在操作系统运行时无法移动或复制。

Windows使用Security Accounts Manager注册表项文件在用户登录Windows帐户时对其进行身份验证。每当用户登录时,Windows都会使用一系列哈希算法来计算已输入密码的哈希值。如果输入的密码哈希值等于SAM 注册表文件(SAM registry file)中的密码哈希值,则允许用户访问他们的帐户。这也是大多数黑客在执行攻击时所针对的文件。

2. 安全(2. Security)性(只有管理员才能访问)——此注册表项对于登录到当前系统的管理用户的帐户是本地的。如果系统由任何组织管理,则用户无法访问此文件,除非已明确授予用户管理访问权限。如果我们在没有管理权限的情况下打开这个文件,它将是空白的。现在,如果我们的系统连接到管理网络,则此密钥将默认为由组织建立并积极管理的本地系统安全配置文件。此密钥与SAM相关联,因此在成功验证后,根据用户的权限级别,将应用各种本地和组策略(group policies)

3. 系统(3. System)(关键启动过程和其他内核功能)——这个子键包含与整个系统相关的重要信息,例如计算机名称、当前安装的硬件设备、文件系统以及在某个事件中可以采取什么样的自动化操作,比如那里是由于CPU过热而导致(CPU)蓝屏死机(Blue screen of death),计算机将自动开始处理此类事件的逻辑程序。此文件只能由具有足够管理权限的用户访问。当系统启动时,这是所有日志动态保存和读取的地方。各种系统参数,例如称为控制集的替代配置。

4. 软件(4. Software )所有第三方(Third-party)软件配置,如即插即用驱动程序都存储在这里。此子项包含链接到预先存在的硬件配置文件的软件和Windows设置,可以由各种应用程序和系统安装程序更改。软件(Software)开发人员可以限制或允许用户在使用他们的软件时访问哪些信息,这可以使用“策略”子键进行设置,该子键对应用程序和系统服务执行一般使用策略,包括使用的系统证书验证、授权或禁止某些系统或服务。

5.硬件(5. Hardware)是系统启动过程中动态创建的子项

6. 组件(6. Components )系统范围的设备特定组件配置信息可以在这里找到

7. BCD.dat(在系统分区的oot文件夹中)这是一个关键文件,系统在系统启动过程中通过将注册表加载到RAM中读取并开始执行。

iii. HKEY_CURRENT_CONFIG

存在此子项的主要原因是存储视频以及网络设置。这可能是与视频卡有关的所有信息,例如分辨率、刷新率、纵横比等以及网络

它也是一个注册表配置单元,是Windows 注册表(Windows Registry)的一部分,用于存储有关当前正在使用的硬件配置文件的信息。HKEY_CURRENT_CONFIG实际上是指向HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles\Currentregistry注册表项的指针,这只是指向 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetHardwareProfiles 项下列出的当前活动硬件配置文件的HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\HardwareProfiles

因此HKEY_CURRENT_CONFIG帮助我们查看和修改当前用户的硬件配置文件的配置,我们可以作为管理员在上面列出的三个位置中的任何一个位置进行操作,因为它们都是相同的。

iv. HKEY_CURRENT_USER

注册表配置单元的一部分,其中包含特定于当前登录用户的Windows和软件的存储设置以及配置信息。例如,注册表项中的各种注册表值位于HKEY_CURRENT_USER配置单元控制用户级设置,例如键盘布局、安装的打印机、桌面壁纸、显示设置、映射的网络驱动器等。

您在控制面板(Control Panel)的各种小程序中配置的许多设置都存储在 HKEY_CURRENT_USER注册表配置单元中。因为HKEY_CURRENT_USER配置单元是特定于用户的,所以在同一台计算机上,其中包含的键和值将因用户而异。这与大多数其他全局注册表配置单元不同,这意味着它们在Windows中的所有用户之间保留相同的信息。

单击注册表编辑器屏幕的左侧将使我们能够访问HKEY_CURRENT_USER。作为一种安全措施,存储在HKEY_CURRENT_USER上的信息只是指向位于HKEY_USERS配置单元下的密钥的指针,作为我们的安全标识符。对任一区域所做的更改将立即生效。

v. HKEY_USERS

这包含与每个用户配置文件的HKEY_CURRENT_USER键对应的子键。这也是我们在Windows 注册表(Windows Registry)中拥有的众多注册表配置单元之一。

所有用户特定的配置数据都记录在这里,对于积极使用设备的每个人来说,类型信息都存储在HKEY_USERS下。存储在系统上与特定用户对应的所有用户特定信息都存储在HKEY_USERS配置单元下,我们可以使用安全标识符或记录用户所做的所有配置更改的 SID来唯一标识用户。(security identifier or the SID)

所有这些在HKEY_USERS(HKEY_USERS)配置单元中存在帐户的活动用户,根据系统管理员授予的权限,将能够访问共享资源,例如打印机、本地网络、本地存储驱动器、桌面背景等。他们的帐户具有一定的注册表存储在当前用户的SID下的键和相应的注册表值。

在取证信息方面,每个SID都会存储有关每个用户的大量数据,因为它会记录在用户帐户下进行的每个事件和操作。这包括用户(Name)、用户登录计算机的次数、上次登录的日期和时间、上次更改密码的日期和时间、登录失败的次数等等。此外,它还包含有关Windows何时加载并位于登录提示符处的注册表信息。

推荐:(Recommended:) 修复注册表编辑器已停止工作(Fix The Registry editor has stopped working)

默认用户的注册表项存储在配置文件中的文件 ntuser.dat 中,我们必须使用 regedit 将其加载为配置单元以添加默认用户的设置。

我们可以在 Windows 注册表中找到的数据类型(Types of data we can expect to find in the Windows Registry)

上面讨论的所有键和子键都将具有保存在以下任何数据类型中的配置、值和属性,通常,它是构成我们整个 Windows 注册表的以下数据类型的组合。

  • 字符串值,例如Unicode,它(Unicode ​which)是一种计算行业标准,用于对世界上大多数书写系统中表达的文本进行一致的编码、表示和处理。
  • 二进制数据
  • 无符号整数
  • 符号链接
  • 多字符串值
  • 资源(Resource)列表(即插即用(Plug)硬件(Play)
  • 资源(Resource)描述符(即插即用(Plug)硬件(Play)
  • 64 位整数

结论(Conclusion)

Windows 注册表(Windows Registry)不亚于一场革命,它不仅最大限度地减少了使用文本文件作为文件扩展名来保存系统和应用程序配置所带来的安全风险,而且还减少了应用程序开发人员的配置或 .ini 文件的数量必须与他们的软件产品一起发布。拥有一个集中存储库来存储系统以及系统上运行的软件经常访问的数据的好处是非常明显的。

易用性以及在一个中心位置访问各种自定义和设置也使 windows 成为各种软件开发人员桌面应用程序的首选平台。如果您将 Windows 的可用桌面软件应用程序的数量与 Apple 的 macOS 进行比较,这一点非常明显。总而言之,我们讨论了Windows 注册表(Windows Registry)的工作原理及其文件结构以及各种注册表项配置的意义以及如何使用注册表编辑器来实现完整的效果。



About the author

我是一位经验丰富的软件工程师,在 Windows Phone 和 Office Space 行业拥有超过 10 年的经验。我的技能包括使用传统的文本和图像格式,以及为最新的移动设备进行开发。我在提供优质服务方面有着良好的记录,并且我总是愿意帮助他人实现他们的目标。



Related posts