注册表结构
注册表采用树形层次结构组织数据,从上到下依次为:
- 配置单元(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\.DEFAULT | C:\Windows\System32\config\systemprofile\NTUSER.DAT |
| Network Service | HKEY_USERS\S-1-5-20 | NetSvc 的配置文件单元 |
| Local Service | HKEY_USERS\S-1-5-19 | LocSvc 的配置文件单元 |
注册表值的数据类型
| 数据类型 | 类型 | 典型用途 |
|---|---|---|
REG_SZ | 以 null 结尾的字符串。 | 文件路径、程序名称 |
REG_EXPAND_SZ | 一个以 null 结尾的字符串,其中包含对环境变量的未扩展引用,例如,%PATH%。 若要展开环境变量引用,请使用 ExpandEnvironmentStrings 函数。 | %SystemRoot%\System32 |
REG_BINARY | 任何形式的二进制数据。 | 硬件参数、加密密钥 |
REG_NONE | 没有定义的值类型。 | |
REG_DWORD | 32 位数字。 | 开关值(如 EnableLUA=1)、服务启动类型 |
REG_DWORD_LITTLE_ENDIAN | 小端格式的 32 位数字。 Windows 设计为在小端计算机体系结构上运行。 因此,此值在 Windows 头文件中定义为 REG_DWORD。 | |
REG_DWORD_BIG_ENDIAN | big-endian 格式的 32 位数字。 某些 UNIX 系统支持大端体系结构。 | |
REG_QWORD | 64 位数字。 | 大数值配置 |
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— 与另一台计算机上的预定义注册表句柄建立连接。
本文详解Windows注册表的树形结构,包括配置单元(Hive)、键/子键、值及其数据类型;介绍五大预定义根键(如HKEY_USERS)的作用与访问机制;重点阐述通过regedit、命令行工具及Win32 API进行注册表操作、检索与文件级导入导出的方法,并涵盖.NET中的Registry类支持。
281

被折叠的 条评论
为什么被折叠?



