注册表说明

Microsoft 计算机字典(第五版)将注册表定义为:

Windows 98、Windows CE、Windows NT 和 Windows 2000 中使用的中央层次结构数据库,用于存储为一个或多个用户、应用程序和硬件设备配置系统所需的信息。

简单来说,就是个系统自带的简易数据库

是Windows操作系统中用于存储系统配置信息和应用程序设置的重要组成部分。

https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/performance/windows-registry-advanced-users


版本迭代

早期版本

Windows注册表的概念最早出现在Windows 3.1中,用于存储系统配置信息。

初始版本是基于INI文件的配置,后来发展为注册表数据库,这种数据库更有效地组织和管理系统配置信息。

Windows 95/98/NT

在Windows 95和Windows NT中,注册表得到进一步的改进和扩展,包括更多的系统配置信息、应用程序设置和用户偏好。

Windows 2000/XP/Server 2003

随着Windows 2000、Windows XP和Windows Server 2003的推出,注册表成为Windows操作系统中的核心组件,用于存储几乎所有的系统和应用程序设置。

Windows Vista/7/8/10

在后续的Windows版本中,注册表仍然是系统配置的关键部分,并持续得到改进和优化,以提高性能和安全性。


具体功用

  • 存储系统配置信息

注册表存储Windows操作系统的各种配置信息,包括硬件配置、系统服务、驱动程序设置等。

  • 存储应用程序设置

应用程序可以将其设置和配置信息存储在注册表中,包括安装路径、默认选项、文件关联等。

  • 存储用户偏好设置

注册表还存储用户偏好设置,例如外观主题、桌面背景、文件夹选项等。

  • 提供动态数据存储

注册表可以在系统运行时动态地读取和写入数据,这使得应用程序能够实时地获取配置信息。

  • 提供系统调优和性能优化功能

通过对注册表的调整,用户可以优化系统性能、修改用户界面、更改默认应用程序等。

  • 提供应用程序和组件之间的通信机制

应用程序可以使用注册表作为一种通信机制,用于存储和共享数据,实现组件之间的互操作性。

  • 提供系统诊断和故障排除功能

系统管理员和技术支持人员可以使用注册表来诊断和解决系统故障和问题。


现在软件开发为什么不用注册表了

  • 软件迁移困难

注册表将软件配置信息存储在Windows注册表中,‌这意味着当用户更换电脑时,‌除了需要拷贝程序文件外,‌还需要单独处理注册表信息,‌这增加了软件迁移的复杂性

  • 系统兼容性问题

由于注册表存储了大量的系统配置和定制化信息,‌其迁移几乎不可能,‌导致Windows系统上软件的迁移十分不便。‌这在一定程度上限制了系统的兼容性和可维护性

  • 不适应跨平台开发

对于跨平台的软件开发来说,‌注册表的存在成为了一个障碍,‌因为它主要是为Windows系统设计的。‌随着越来越多的软件需要适应不同的操作系统,‌注册表的使用受到了限制

  • 垃圾残留

往往在卸载一个软件后,注册表中仍会存留大量的无用信息,需要在用专门的软件清除,而这种清除是带有让系统瘫痪的风险的


注册表打开方式

cmd中输入

regedit


目录结构

Windows注册表是层次化数据库结构,用于存储操作系统和应用程序的配置信息。

结构类似于文件系统,由键(Keys)值(Values)组成。

一个项的所有值的总大小有 64K 限制。


以下是Windows注册表的主要目录结构:

HKEY_CLASSES_ROOT (HKCR)

是 HKEY_LOCAL_MACHINE\Software 的子项。 此处存储的信息可确保使用 Windows 资源管理器打开文件时打开正确的程序。 此项有时缩写为 HKCR。 从 Windows 2000 开始,此信息同时存储在 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 项下。 HKEY_LOCAL_MACHINE\Software\Classes 项包含可应用于本地计算机上所有用户的默认设置。 HKEY_CURRENT_USER\Software\Classes 项包含覆盖默认设置并仅应用于交互式用户的设置。 HKEY_CLASSES_ROOT 项提供合并这两个源中信息的注册表视图。 HKEY_CLASSES_ROOT 还为针对 Windows 早期版本设计的程序提供此合并视图。 要更改交互式用户的设置,必须在 HKEY_CURRENT_USER\Software\Classes 下而不是在 HKEY_CLASSES_ROOT 下进行更改。 要更改默认设置,必须在 HKEY_LOCAL_MACHINE\Software\Classes 下进行更改。 如果将项写入 HKEY_CLASSES_ROOT 下的项,系统会将信息存储在 HKEY_LOCAL_MACHINE\Software\Classes 下。 如果将值写入 HKEY_CLASSES_ROOT 下的项,并且该项已存在于 HKEY_CURRENT_USER\Software\Classes 下,则系统会将信息存储在该处而不是存储在 HKEY_LOCAL_MACHINE\Software\Classes 下。

包含文件扩展名与应用程序关联的信息,以及COM对象和ActiveX控件的注册信息。

HKEY_CURRENT_USER (HKCU)

用户的文件夹、屏幕颜色和控制面板设置存储在此处。 此信息与用户的配置文件相关联

是 HKEY_USERS 的子项

存储当前用户的配置信息。每个用户登录时,都会有自己的HKEY_CURRENT_USER分支。

HKEY_LOCAL_MACHINE (HKLM)

包含特定于计算机(针对任何用户)的配置信息

存储本地计算机的配置信息,包括硬件配置、安装的软件和驱动程序的信息。

HKEY_USERS (HKU)

包含计算机上所有主动加载的用户配置文件。

存储所有用户的配置信息。每个用户都有自己的HKEY_USERS分支,其根据用户的安全标识符(SID)来命名。

HKEY_CURRENT_CONFIG

包含有关本地计算机在系统启动时使用的硬件配置文件的信息。

提供当前计算机配置的信息,主要用于系统配置程序。


每个键(Key)都可以包含子键和值。

子键类似于文件夹,可以包含其他键和值。

而值则存储与键相关的数据。

注册表的键和值之间存在着父子关系,形成树状结构

例如,HKEY_LOCAL_MACHINE\SOFTWARE 是一个常用的键,用于存储已安装的软件信息。在此键下可能会有许多子键,每个子键代表一个已安装软件的信息,而子键中的值则存储各种配置数据。


数据类型

名称

数据类型

说明

二进制值

REG_BINARY

原始二进制数据。 大多数硬件组件信息存储为二进制数据,并以十六进制格式显示在注册表编辑器中。

DWORD 值

REG_DWORD

由 4 字节长的数字表示的数据(32 位整数)。 设备驱动程序和服务的许多参数都是此类型,并以二进制、十六进制或十进制格式显示在注册表编辑器中。 相关值有 DWORD_LITTLE_ENDIAN(最低有效字节位于最低地址)和 REG_DWORD_BIG_ENDIAN(最低有效字节位于最高地址)。

可扩充字符串值

REG_EXPAND_SZ

可变长度的数据字符串。 此数据类型包括程序或服务在使用数据时解析的变量。

多字符串值

REG_MULTI_SZ

多个字符串。 包含列表的值或多个人员可以读取的值通常为此类型。 条目用空格、逗号或其他标记隔开。

字符串值

REG_SZ

固定长度的文本字符串。

二进制值

REG_RESOURCE_LIST

一系列嵌套数组,旨在存储硬件设备驱动程序或其控制的物理设备使用的资源列表。 系统检测到此数据并将其写入 \ResourceMap 树中,并在注册表编辑器中以十六进制格式显示为二进制值。

二进制值

REG_RESOURCE_REQUIREMENTS_LIST

一系列嵌套数组,旨在存储设备驱动程序可能的硬件资源列表,该列表可供驱动程序或它控制的物理设备使用。 系统在 \ResourceMap 树中写入此列表的子集。 系统检测到此数据,并在注册表编辑器中以十六进制格式显示为二进制值。

二进制值

REG_FULL_RESOURCE_DESCRIPTOR

一系列嵌套数组,旨在存储物理硬件设备使用的资源列表。 系统检测到此数据并将其写入 \HardwareDescription 树中,并在注册表编辑器中以十六进制格式显示为二进制值。

REG_NONE

没有任何特定类型的数据。 系统或应用程序将此数据写入注册表,并在注册表编辑器中以十六进制格式显示为二进制值

链接

REG_LINK

命名符号链接的 Unicode 字符串。

QWORD 值

REG_QWORD

由 64 位整数的数字表示的数据。 此数据在注册表编辑器中以二进制值形式显示,并在 Windows 2000 中引入。


REG语法(注册表的增删改查)

在Windows的命令行界面(CMD)中运行 reg 命令时,实际上使用 Windows 注册表编辑器的命令行版本。reg 命令允许在注册表中执行多种操作,包括添加、删除、修改注册表项和值等。

reg


REG Operation [Parameter List]

Operation:
  ADD           添加新的注册表项或值。
  DELETE        删除注册表项或值。
  QUERY         查询注册表项或值。
  EXPORT        将注册表项导出到文件。
  IMPORT        从文件导入注册表项。

Parameter List:
  /?            显示帮助信息。
  <KeyName>     指定注册表项的路径。
  /v ValueName  指定注册表值的名称。
  /t DataType   指定注册表值的数据类型。
  /d Data       指定注册表值的数据。
  /f            强制执行操作。
  /s            递归查询子项。
  /ve           对默认值执行操作。

ADD(添加)操作

REG ADD <KeyName> [/v ValueName | /ve] [/t DataType] [/s Separator] [/d Data] [/f]

<KeyName>:要添加的注册表项的路径。
/v ValueName:新建值的名称。如果省略,则创建默认值。
/ve:指定要操作的默认值。
/t DataType:指定值的数据类型。常见的数据类型包括 `REG_SZ`(字符串)、`REG_DWORD`(双字)、`REG_BINARY`(二进制)等。
/d Data:指定要添加的数据。
/f:强制执行操作。

DELETE(删除)操作

REG DELETE <KeyName | ValueName> [/v ValueName | /ve] [/f]

<KeyName | ValueName>:要删除的注册表项或值的路径。
/v ValueName:要删除的值的名称。
/ve:指定要操作的默认值。
/f:强制执行操作。

QUERY(查询)操作

REG QUERY <KeyName> [/s] [/ve] [/f Data] [/t DataType]

<KeyName>:要查询的注册表项的路径。
/s:递归查询子项。
/ve:查询默认值。
/f Data:查询包含特定数据的注册表项或值。
/t DataType:查询特定数据类型的注册表项或值。

EXPORT(导出)操作

REG EXPORT <KeyName> <FileName> [/y]

<KeyName>:要导出的注册表项的路径。
<FileName>:导出的文件名。
/y:确认覆盖现有文件。

IMPORT(导入)操作

REG IMPORT <FileName>

<FileName>:包含注册表项的导入文件。