注册表是Windows操作系统中的一个重要组成部分,它主要用于存储Windows中各个组件、应用程序、驱动程序等的配置信息和设置参数。Windows操作系统的许多功能和特性都依赖于注册表来存储和管理相关的配置信息,包括用户界面、网络连接、硬件驱动、系统安全等等方面。
注册表的结构类似于一个树状结构,由多个分支和叶子节点组成。最上层为HKEY_CLASSES_ROOT、HKEY_CURRENT_USER等分支节点,每个节点下面包含着若干个子项,子项下面则包含着若干个键值对,也就是存储着实际配置信息的数据单元。
Windows 3.1首次引入了注册表,至今仍被广泛使用。注册表已经取代了autoexec.bat、config.sys以及几乎所有早期版本的Windows中的INI文件,成为了配置和管理系统的主要方式。极大地简化了系统配置和管理的过程。
发展历史
在注册表问世之前,Windows系统和应用程序的信息通常被存储在后缀名为ini的文本文件中。然而,由于每个程序都会新安装一个或多个ini文件来存储程序信息,导致信息的分布极为零乱,不便于使用和管理。
1993年,微软推出了Windows NT 3.1操作系统。NT注册表的结构和功能与后续的Windows版本基本保持一致。注册表以一个层次化的树形结构组织,类似于文件系统中的文件夹和文件的结构。使用户更方便地管理系统配置和应用程序设置。在NT 4.0中,更新了HKEY_CURRENT_CONFIG子树以提供对硬件配置文件的支持。
1998年6月25日,微软公司发布了Windows 98电脑操作系统。代码处理注册表的速度更快、更健壮,并且当出现某些问题时,操作系统能够自动检测和修复。同时,注册表服务使用更少的实模式内存和保护模式记忆,具备更优秀的CPU缓存支持,缩短在注册表中查找值所需的时间。这些优化措施使得Windows 98操作系统的性能有了明显的提升。
2000年2月17日,微软发布了Windows 2000操作系统。Windows 2000首次引入了注册表事务日志的概念,以提高注册表的可靠性。在Windows 2000中,写入注册表文件时可以使用事务日志。具体的实现方式是,在数据被写入注册表之前,将其存储在事务日志中。如果由于锁定或者其他原因导致无法直接写入注册表的活页,那么系统会使用事务日志进行恢复。
2006年11月30日,微软公司发布了Windows Vista操作系统。Windows Vista引入了注册表虚拟化技术,这是一项应用程序兼容性技术。注册表虚拟化使得具有全局影响的注册表写入操作可以重定向到每个用户的位置。对于读取或写入注册表的应用程序来说,这个重定向操作是透明的。
2009年10月,微软发布了Windows 7的操作系统,其核心版本号为Windows NT 6.1。在Windows 7中,注册表主要由“键”和“键值”构成,类似于我的电脑中的文件夹。同时,注册表中记录了用户安装在计算机上的软件和每个程序的相关信息,通过它可以控制硬件、软件、用户环境和操作系统界面的数据信息文件。
2013年10月17日,微软公司发布了Windows 8.1操作系统。Windows 8.1引入了新的注册表事务日志格式,以提升系统的可靠性和性能。新的日志格式采用了环形缓冲区的工作方式,其中最老的数据将被新的数据覆盖。每个日志条目都包括序列号和注册表偏移量,从而能够轻松确定写入的顺序和页面位置。
2015年7月,微软发布了Windows 10的操作系统。相较于早期版本的Windows,Windows 10的注册表具有一些新的功能和改进。例如,如果用户已更新了Windows 10 KB4571756或KB4566782补丁,则支持通过编辑注册表开启Windows1020H2中的一个全新功能。此外,还有一些实用但小众的功能,如解除文件路径长度限制等,这些功能只能通过编辑注册表或组策略来开启。
注册表的结构
注册表是一个分层数据库。层次结构的顶部是用户的计算机。在它下面,会发现主要的分支,被称为“蜂巢”。这些配置单元中有注册表项。项可以包含子项和注册表值。键值有三种类型:String、Binary 或 DWORD。字符串是一行文本。二进制即表示为 1 和 0 的值。DWORD 是一个四字节数字。这些值通常用于存储布尔值,因此 1 或 0 可以表示“启用”和“禁用”。
分支结构
HKEY_CLASSES_ROOT
HKEY_CLASSES_root 通常简称为 HKCR,是 Windows 注册表中的一个注册表单元,包含文件扩展名关联信息以及程序标识符 (ProgID)、类标识符 (CLSID) 和接口标识符 (IID) 数据。这个注册表配置单元包含必要的信息,当用户需要 Windows 执行某些操作时,它就会知道该怎么做,比如查看驱动器的内容或打开某种类型的文件等。
KEY_CLASSES_ROOT子树包含两种类型的数据:一种是与文件类型相关联的数据,用于关联文件类型与程序;另一种是用于配置COM对象、Visual Basic程序或其他自动化数据的数据。文件类型的子项与文件扩展名同名,如 .exe。文件类型关联存储在注册表中,但更改它们应使用Windows资源管理器。而配置子项则使用程序ID或其他信息类作为父键,如COM、Visual Basic、自动化和脚本的信息类钥匙,如CLSID、接口、TypeLib、AppId等。
HKEY_CURRENT_USER
HKEY_CURRENT_USER,经常缩写为HKCU,是Windows注册表中的几个主要注册表配置单元之一,也是Windows注册表的重要组成部分。它包含Windows和特定于当前登录用户的软件的配置信息。例如,位于该配置单元下的各种注册表键中的各种注册表值控制着诸如已安装的打印机、桌面墙纸、显示设置、环境变量、键盘布局、映射的网络驱动器等用户级设置。许多在控制面板中的小程序中配置的设置实际上都存储在这个配置单元中。
HKEY_CURRENT_USER子树仅存储当前用户子项的SID指针,并不直接包含数据。它提供对数据的更轻松访问,每次用户登录时都会创建新的子树,数据来自用户的配置文件。如果没有可用的配置文件,子树将根据默认用户的设置生成,这些设置存储在系统驱动器中的Ntuser.dat文件中。
HKEY_LOCAL_MACHINE
HKEY_LOCAL_MACHINE,通常缩写为HKLM,是组成Windows注册表的几个注册表配置单元之一。该子树包含有关本地计算机系统的信息,包括硬件和操作系统数据,如总线类型、系统内存、设备驱动程序和启动控制参数。
HKEY_USERS
HKEY_USERS,有时被视为HKU,是Windows注册表中的许多注册表配置单元之一。它包含计算机上所有当前活动用户的特定用户配置信息。HKEY_USERS配置单元下的每个注册表项都对应于系统上的一个用户,并使用该用户的安全标识符或SID命名。每个SID下的注册表项和注册表值控制该用户的特定设置,如映射的驱动器、安装的打印机、环境变量、桌面背景等,并在用户首次登录时加载。
HKEY_CURRENT_CONFIG
HKEY_CURRENT_CONFIG(HKCC)子树并不直接包含数据,而是存储指向当前硬件配置文件内容的指针,这些数据实际上位于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current子项中。HKCC提供了一个更便捷的访问方式,使用户能够在任何位置查看和更改这些硬件配置信息。该子树包含在运行时收集的信息,存储在此键中的信息不会永久存储在磁盘上,而是在启动时重新生成。它是键“HKEY_LOCAL_MACHINESystemCurrentControlSetHardware ProfilesCurrent”的句柄,该键最初为空,但在启动时通过加载存储在“HKEY_LOCAL_MACHINESystemCurrentControlSetHardware Profiles”中的其他子键之一进行填充。
配置单元
配置单元是注册表中键、子项和值的逻辑组,用于在操作系统启动或用户登录时加载到内存中的支持文件。每个新用户登录计算机时,都会为其创建一个新的用户配置文件配置单元,其中包含与用户的应用程序设置、桌面、环境、网络连接和打印机相关的特定注册表信息。这些配置单元可以使用标准格式或最新格式的注册表文件存储,并存放在%SystemRoot%\system32\Config目录中。其中,标准格式在Windows XP及更高版本的操作系统中仍被支持,而最新格式则在支持最新格式的Windows版本中使用。每次用户登录时,这些文件都会更新。
数据类型
每个值都可以存储具有可变长度和编码的任意数据,但这些数据与定义如何分析此数据的符号类型(定义为数值常量)相关联。
注册表存储空间
应用程序在注册表中存储数据时,应遵循一些实用准则以提高系统效率。建议将配置和初始化数据存储在注册表中,而将其他类型的数据存储在其他地方。超过一两千字节的数据应存储为文件,并使用注册表中的键进行引用。此外,应将类似的数据分组为结构,并将结构存储为值,以节省空间。在 Windows 操作系统中,注册表文件的视图映射到分页池内存或计算机CPU缓存地址空间中,无论数据大小如何,费用不超过 4 MB。注册表配置单元的最大大小为 2 GB,但系统配置单元除外。在某些版本的 Windows 中,尽管没有显式限制分页池内存和磁盘空间中的配置单元可能占用的总空间量,但系统配额可能会影响实际的最大大小。从 Windows Server 2003 Service Pack 2 (SP2) 开始,注册表配置单元的最大大小限制为 2 GB。
注册表文件
注册表文件记录了用户安装在计算机上的软件和每个程序的相互关联信息,包括计算机的硬件配置,如自动配置的PnP的设备和已有的各种设备说明、状态属性以及各种状态信息和数据。此外,注册表也存放着各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行,从而在整个系统中起着核心作用。应用程序可以使用一些特定的函数来将注册表的一部分保存到文件中,并在需要时将文件的内容加载回注册表。
注册表函数
注册表函数是Windows操作系统提供的一种用于处理注册表的API,其功能丰富,包括检索注册表的注册表函数是Windows操作系统提供的一种用于处理注册表的API,其功能丰富,包括检索注册表的当前大小以及允许注册表在系统上达到的最大大小,关闭指定注册表项的句柄,与另一台计算机上的预定义注册表句柄建立连接,将指定的注册表项及其值和子项复制到指定的目标键等。
编辑注册表
注册表编辑器
注册表编辑器是Windows操作系统中的一个重要工具,用于查看和维护注册表。注册表是Windows操作系统中的一个核心数据库,存放着各种系统参数和应用程序的设置信息。通过注册表编辑器,用户可以修改注册表中的内容,以实现一些特定的功能,例如加快启动速度、修改系统设置、修复系统问题等。
是否应该编辑注册表:除非别无选择,否则不要直接编辑注册表。 注册表编辑器会忽略标准的安全措施,从而使得这些设置可能降低性能、破坏系统,甚至要求用户重新安装 Windows。 用户可以使用控制面板或 微软 管理控制台 (MMC) 中的程序安全地更改大多数注册表设置。 如果必须直接编辑注册表,请先进行备份。
reg 命令编辑注册表
使用 reg 命令可以对注册表项中的注册表子项信息和值执行操作,可以查看或配置本地或远程计算机上的注册表项,但使用 reg 配置远程计算机的注册表会限制在某些操作中可以使用的参数,因此需要检查每个操作的语法和参数,以确保它们可以在远程计算机上使用。
使用脚本编辑注册表
除了使用reg.exe 实用程序执行所有典型的注册表操作。还有另一种选择——Windows PowerShell。PowerShell 提供了大量工具,用于在本地计算机上或远程与 Microsoft Windows 注册表进行交互。
注册表的局限性
Windows 注册表的缺点包括迁移困难、单点故障的问题以及容易受到用户恶意和无意损坏的风险。尽管通过事务日志和多级日志文件可以在一定程度上防止损坏和修复问题,但其集中式和分层结构仍使注册表成为系统中的薄弱环节。因此,在使用注册表时需要谨慎,并且定期进行备份是很重要的。
参考资料 >
Registry.microsoft.2023-11-22
注册表的结构.Microsoft.2023-11-17
Windows 3.1 is officially 30 years old.windowscentral.2023-11-28
预定义密钥.Microsoft.2023-11-17
注册表层次结构.Microsoft.2023-11-23
What Is the Windows Registry?.lifewire.2023-11-30
Configure an Ini File Item.microsoft.2023-11-24
Unix Configuration File.fileinfo.2023-11-24
Happy 20th birthday, Windows NT 3.1: Microsoft's server outrider.theregister.2023-11-28
Editing the Windows NT Registry.itprotoday.2023-11-29
Windows 98 发布|历史上的今天.腾讯网.2023-12-06
Chapter 31 - Windows 98 Registry. Windows 98 注册表.2023-12-06
Remembering Windows 2000, Microsoft's Forgotten Masterpiece.howtogeek.2023-11-24
Just a moment....mandiant.2023-12-06
微软Windows Vista.eyewated.2023-12-06
Registry Virtualization.microsoft.2023-12-06
微软公布Win8.1正式版发布时间:10月17免费升.IT之家.2023-12-06
教你如何通过注册表开启 Win10 20H2 新功能,获得全新开始菜单.IT之家.2023-11-29
最大路径长度限制.microsoft.2023-11-29
HKEY.lifewire.2023-12-07
HKEY_CLASSES_ROOT.microsoft.2023-12-07
什么是HKEY_CURRENT_USER?.lifewire.2023-12-07
HKEY_CURRENT_USER.Microsoft.2023-11-17
HKEY_LOCAL_MACHINE.Microsoft.2023-11-17
HKEY_USERS (HKU Registry Hive).lifewire.2023-12-07
HKEY_CURRENT_CONFIG.Microsoft.2023-11-17
Understanding the Registry on Windows.uconn.2023-12-07
注册表配置单元.Microsoft.2023-11-20
注册表数据类型.microsoft.2023-11-30
注册表存储空间.Microsoft.2023-11-17
注册表文件.Microsoft.2023-11-20
注册表元素大小限制.Microsoft.2023-11-20
注册表函数.Microsoft.2023-11-20
使用 64 位版本的 Windows 查看系统注册表.microsoft.2023-11-30
Hotfix information for Windows Server 2003.Microsoft支持.2023-11-30
Overview of the Windows Registry.Microsoft.2023-11-23
How to Back Up the Windows Registry.lifewire.2023-11-22
如何添加、更改和删除注册表项和值.lifewire.2023-11-22
reg 命令.microsoft.2023-12-07
如何使用 PowerShell 获取、编辑、创建和删除注册表项.netwrix.2023-12-07
Windows 注册表 - 缺点.liquisearch.2023-12-07