注册表架构详解

本文详解Windows注册表的树形结构,包括配置单元(Hive)、键/子键、值及其数据类型;介绍五大预定义根键(如HKEY_USERS)的作用与访问机制;重点阐述通过regedit、命令行工具及Win32 API进行注册表操作、检索与文件级导入导出的方法,并涵盖.NET中的Registry类支持。

注册表结构

注册表采用树形层次结构组织数据,从上到下依次为:

  • 配置单元(Hive):最顶层的节点,即五大根键
  • 键(Key)/ 子键(Subkey):类似文件夹,用于分组和导航
  • 值(Value):类似文件,存储实际数据,由名称、数据类型、数据三要素组成

注册表树最大可深达 512 个级别,键名不区分大小写,最长 255 个字符。

各根注册表关系
HKEY_CLASSES_ROOT = 
	HKEY_CURRENT_USER\Software\Classes + 
	HKEY_LOCAL_MACHINE\Software\Classes
HKEY_CURRENT_USER 是当前用户注册表数据
HKEY_LOCAL_MACHINE 是当前机器所有注册表数据
HKEY_CURRENT_CONFIG = HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current
HKEY_USERS 是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\hivelist 的用户挂载点集合

HKEY_CLASSES_ROOT -> HKCR
HKEY_CURRENT_USER -> HKCU
HKEY_LOCAL_MACHINE -> HKLM

HKEY_USERS结构简介:

在 HKEY_USERS 里实际会挂出来的配置单元种类——只有具备“用户配置文件”的身份才会出现,绝大多数 SID 根本不会进 HKU。

HKEY_USERS\.DEFAULT    ##################LocalSystem(SYSTEM)
-----------------------------------------------------------------
HKEY_USERS\S-1-0       #Null
HKEY_USERS\S-1-1       #World,Everyone
HKEY_USERS\S-1-2       #Local
	S-1-2-0                #Local(本机登录)
	S-1-2-1                #Console Logon(物理控制台登录)
HKEY_USERS\S-1-3       #Creator
	S-1-3-0                #Creator Owner
	S-1-3-1                #Creator Group
	S-1-3-4                #Owner Rights
HKEY_USERS\S-1-4       #Non-unique保留未用
-----------------------------------------------------------------
HKEY_USERS\S-1-5       ##################NT Authority
	S-1-5-2	    NETWORK	通过网络访问本机的连接
	S-1-5-3	    BATCH	批处理/计划任务上下文
	S-1-5-4	    INTERACTIVE	交互式登录(坐在那儿敲键盘的)
	S-1-5-6	    SERVICE	以服务方式运行的进程
	S-1-5-7	    ANONYMOUS LOGON	空会话/未认证访问
	S-1-5-8	    PROXY	代理服务器上下文(基本废弃)
	S-1-5-9	    ENTERPRISE DOMAIN CONTROLLERS	林内所有 DC
	S-1-5-10	SELF	“对象自身”,常用于 AD 上的自修改权限
	S-1-5-11	Authenticated Users	任何成功认证的主体(最常用)
	S-1-5-12	RESTRICTED	受限制令牌
	S-1-5-13	TERMINAL SERVER USER	终端服务器上的会话
	S-1-5-14	Remote Interactive Logon	RDP 远程登录
	S-1-5-15	THIS ORGANIZATION	同一林/可信域内的主体
---------------------------------------------------------------------
	S-1-5-17               #IUSR(匿名 Internet 用户)极少挂载
	S-1-5-18               #SYSTEM 对应.DEFAULT
	S-1-5-19               #LOCAL SERVICE
	S-1-5-20               #NETWORK SERVICE
	S-1-5-21-<机器ID>      ######### 你建的本地用户和本地组
	S-1-5-21-<域ID>        ######### 域用户、域组
--------------------------------------------------------------------
	S-1-5-32-xxx           ######### Builtin 域
	S-1-5-64               #认证包身份,无配置文件
		S-1-5-64-10            #NTLM
		S-1-5-64-14            #SChannel
		S-1-5-64-21            #Digest Authentication
------------------------------------------------------------------------
	S-1-5-80-xxx-<RID>     ######### NT SERVICE服务名>
------------------------------------------------------------------------
	S-1-5-83-0             #Hyper-V 虚拟机账户
	S-1-5-90-0             #桌面窗口管理器虚拟账户
	S-1-5-96-0             #字体驱动宿主
	S-1-5-113              #Local account
	S-1-5-114              #Local account and member of Administrators group
----------------------------------------------------------------
HKEY_USERS\S-1-15      #
HKEY_USERS\S-1-16      #它们永远不会出现在 HKU 下——它们是打在对象上的“标签”
运行身份对应 HKEY_USERS 下的项背后的文件
普通交互式用户HKEY_USERS\S-1-5-21-xxx-<RID>(如 S-1-5-21-...-1001)%USERPROFILE%\NTUSER.DAT
LocalSystem(SYSTEM)HKEY_USERS\.DEFAULTC:\Windows\System32\config\systemprofile\NTUSER.DAT
Network ServiceHKEY_USERS\S-1-5-20NetSvc 的配置文件单元
Local ServiceHKEY_USERS\S-1-5-19LocSvc 的配置文件单元

注册表值的数据类型

数据类型类型典型用途
REG_SZ以 null 结尾的字符串。文件路径、程序名称
REG_EXPAND_SZ一个以 null 结尾的字符串,其中包含对环境变量的未扩展引用,例如,%PATH%。 若要展开环境变量引用,请使用 ExpandEnvironmentStrings 函数。%SystemRoot%\System32
REG_BINARY任何形式的二进制数据。硬件参数、加密密钥
REG_NONE没有定义的值类型。
REG_DWORD32 位数字。开关值(如 EnableLUA=1)、服务启动类型
REG_DWORD_LITTLE_ENDIAN小端格式的 32 位数字。 Windows 设计为在小端计算机体系结构上运行。 因此,此值在 Windows 头文件中定义为 REG_DWORD。
REG_DWORD_BIG_ENDIANbig-endian 格式的 32 位数字。 某些 UNIX 系统支持大端体系结构。
REG_QWORD64 位数字。大数值配置
REG_QWORD_LITTLE_ENDIAN采用小端格式的 64 位数字。 Windows 设计为在小端计算机体系结构上运行。 因此,此值在 Windows 头文件中定义为 REG_QWORD。
REG_LINK一个以 null 结尾的 Unicode 字符串,其中包含通过使用 REG_OPTION_CREATE_LINK调用 RegCreateKeyEx 函数创建的符号链接的目标路径。
REG_MULTI_SZ以空字符串结尾的字符串序列(\0)。 下面是一个示例:String1\0String2\0String3\0LastString\0\0。 第一个 \0 终止第一个字符串,第二个从最后一个 \0 终止最后一个字符串,最后一个 \0 终止序列。 请注意,最终终止符必须纳入字符串的长度。服务依赖列表

预定义键

预定义的密钥可帮助应用程序在注册表中导航,并允许开发允许系统管理员作数据类别的工具。
应用程序若要打开密钥,必须向注册表中已打开的另一个密钥提供句柄。而系统定义的预定义键始终处于打开状态。

预定义的密钥描述
HKEY_CLASSES_ROOT从属于此键的注册表项定义文档的类型(或类)以及与这些类型关联的属性。 Shell 和 COM 应用程序使用存储在此密钥下的信息。
HKEY_CURRENT_CONFIG包含有关本地计算机系统的当前硬件配置文件的信息。 HKEY_CURRENT_CONFIG 下的信息仅描述了当前硬件配置与标准配置之间的差异。 有关标准硬件配置的信息存储在 软件 和 系统 HKEY_LOCAL_MACHINE密钥下。
HKEY_CURRENT_CONFIG 是 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current 的别名。
HKEY_CURRENT_USER从属于此键的注册表项定义当前用户的首选项。
HKEY_CURRENT_USER 和 HKEY_USERS 之间的映射是每个进程,并且是在进程首次引用 HKEY_CURRENT_USER时建立的。 映射基于第一个线程的安全上下文来引用 HKEY_CURRENT_USER。 如果此安全上下文未在 HKEY_USERS中加载注册表配置单元,则会使用 HKEY_USERS.Default建立映射。 建立此映射后,即使线程的安全上下文发生更改,它也会保留。
除 HKEY_CURRENT_USER\Software\Classes 下的注册表项外,HKEY_CURRENT_USER 中的所有注册表项都包含在漫游用户配置文件的每个用户注册表部分中。 若要从漫游用户配置文件中排除其他条目,请将这些条目存储在 HKEY_CURRENT_USER_LOCAL_SETTINGS中。
HKEY_CURRENT_USER_LOCAL_SETTINGS当前用户对计算机的本地首选项。 这些条目不包括在漫游用户配置文件的每个用户注册表部分中。
HKEY_LOCAL_MACHINE从属于此密钥的注册表项定义计算机的物理状态,包括有关总线类型、系统内存以及已安装硬件和软件的数据。 它包含保存当前配置数据的子项,包括即插即用信息(枚举 分支),其中包括系统上所有硬件的完整列表、网络登录首选项、网络安全信息、软件相关信息(例如服务器名称和服务器位置),以及其他系统信息。
HKEY_PERFORMANCE_DATA通过从属于此密钥的注册表项可以访问性能数据。 数据实际上未存储在注册表中;注册表函数会导致系统从其源收集数据。
HKEY_PERFORMANCE_NLSTEXT从属于此键的注册表项引用文本字符串,这些字符串描述计算机系统所在区域的本地语言的计数器。 这些条目不适用于 Regedit.exe 和 Regedt32.exe。
HKEY_PERFORMANCE_TEXT引用描述美国英语计数器的文本字符串。 这些条目不适用于 Regedit.exe 和 Regedt32.exe。
HKEY_USERS本地计算机上的新用户的默认用户配置和当前用户的用户配置。

如何访问和编辑注册表

注册表编辑器(regedit)

按 Win + R,输入 regedit 即可。

命令行工具

  • reg query — 查询注册表值
  • reg add — 添加注册表项或值
  • reg delete — 删除注册表项或值
  • reg export / import — 导出/导入注册表
  • regedit 可视化注册表工具
  • regsvr32 注册工具

编程接口(Win32 API)

注册表操作

开发者可通过以下核心 API 操作注册表:

  • RegOpenKeyEx — 打开键
  • RegCreateKeyEx — 创建键
  • RegQueryValueEx — 读取值
  • RegSetValueEx — 写入值
  • RegDeleteValue —删除项
  • RegCloseKey — 关闭键
    在 .NET 中,可使用 Microsoft.Win32.Registry 和 RegistryKey 类进行操作。
注册表检索
  • RegEnumKeyEx — 用于枚举给定注册表键下的所有子项
  • RegQueryInfoKey — 检索有关特定注册表子项的详细信息,包括子项数量、值数量、类名长度、安全描述符长度及最后写入时间等
  • RegGetKeySecurity — 检索保护指定注册表键的安全描述符的副本。
  • RegEnumValue — 枚举给定注册表键下的所有值名称。
  • RegQueryValueEx — 检索注册表键中指定名称的值的数据和类型。
  • RegQueryMultipleValues — 检索注册表键中指定名称的值的数据和类型。
  • RegNotifyChangeKeyValue — 在注册表键的属性、内容发生更改或键被删除时,向调用线程发出通知。
注册表文件操作
  • RegSaveKey — 将指定的注册表键及其子项和值保存到文件中
  • RegSaveKeyEx — 扩展的保存函数,支持指定保存格式。
  • RegLoadKey — 将注册表数据从指定文件加载HKEY_USERS 或 HKEY_LOCAL_MACHINE 下的指定子项中。
  • RegUnLoadKey — 从注册表中卸载指定的注册表项及其子项。
  • RegReplaceKey — 使用指定文件中的数据替换注册表中的键及其所有子项和值。
  • RegRestoreKey — 将注册表数据从文件加载到指定键中。
  • RegConnectRegistry — 与另一台计算机上的预定义注册表句柄建立连接。

参考链接

微软文档-关于注册表 - Win32 apps | Microsoft Learn

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值