Windows注册表学习

以下是对Windows注册表学习的记录,内容多来自参考链接,这里仅作学习记录和日后查询。

一、理解注册表

image-20210201145405641

定义及作用

注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。

注册表是 Windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着 Windows的启动、 硬件驱动程序的装载以及一些Windows应用程序的运行,从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联, 硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等。

数据库结构

根据定义可以看出注册表就是一个数据库,那么肯定是有数据结构、类型和存储方式的。

数据结构:

注册表由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。

一个键就是树状数据结构中的一个节点,而子键就是这个节点的子节点,子键也是键。

一个值项则是一个键的一条属性,由名称(name)、数据类型(datatype)以及数据(data)组成。

一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值。

根据上面的理解,那么下图Account可以是一个键,Users是Account的子键,而右侧则是值项。

image-20210201152118963

注册表的数据类型常用的有以下五种:

显示类型 数据类型 说明
REG_SZ 字符串 文本字符串
REG_BINARY 二进制数 不定长度的二进制值,以十六进制显示
REG_DWORD 双字 一个 32 位的二进制值,显示为 8 位的十六进制值
REG_MULTI_SZ 多字符串 含有多个文本值的字符串,此名来源于字符串间用 nul 分隔、结尾两个 nul
REG_EXPAND_SZ 可扩充字符串 含有环境变量的字符串

注册表的5大根键

注册表有五个一级分支,也就是根键:

名称 简称 作用
HKEY_CLASSES_ROOT HKCR 存储Windows可识别的文件类型的详细列表,以及相关联的程序。
HKEY_CURRENT_USER HKCU 存储当前用户设置的信息。
HKEY_LOCAL_MACHINE HKLM 包括安装在计算机上的硬件和软件的信息。
HKEY_USERS HKU 包含使用计算机的用户的信息。
HKEY_CURRENT_CONFIG HKCC 这个分支包含计算机当前的硬件配置信息。

存储方式:

在XP及以后注册表都存放于C:\WINDOWS\SYSTEM32\CONFIG。

image-20210201153925476

在WIN NT操作系统下,计算机配置和缺省用户设置的注册表数据在Win NT中被保存在下面这五个文件中:
DEFAULT,SAM,SECURITY,SOFTWARE,SYSTEM,NTUSER.DAT。

配置单元文件:

名称 注册表分支 作用
SYSTEM HKEY_LOCAL_MACHINE\SYSTEM 存储计算机硬件和系统的信息
NTUSER.DAT HKEY_CURRENT_USER 存储用户参数选择的信息(此文件放置于用户个人目录,和其他注册表文件是分开的)
SAM HKEY_LOCAL_MACHINE\SAM 用户及密码的数据库
SECURITY HKEY_LOCAL_MACHINE\SECURITY 安全性设置信息
SOFTWARE HKEY_LOCAL_MACHINE\SOFTWARE 安装的软件信息
DEFAULT HKEY_USERS\DEFAULT 缺省启动用户的信息
USERDIFF HKEY_USERS 管理员对用户强行进行的设置

二、注册表的增删改查

图形界面操作注册表比较简单,不在这里赘述,主要记录下命令行操作,在命令行下操作一般需要以管理员权限打开CMD。

打开注册表图形界面

1
regedit

操作命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> reg -h

REG QUERY /?
REG ADD /?
REG DELETE /?
REG COPY /?
REG SAVE /?
REG RESTORE /?
REG LOAD /?
REG UNLOAD /?
REG COMPARE /?
REG EXPORT /?
REG IMPORT /?
REG FLAGS /?

权限设置:

为用户赋予相应权限,可以参考Regini修改注册表权限命令

1
2
3
# [1 8 17]表示赋予 administrator、everyone、system分别是完全控制、只读、完全控制权限
echo HKLM\SAM\SAM\Domains\Account\Users [1 8 17] >regini.ini
regini regini.ini

查询注册表项:

REG QUERY KeyName [/v [ValueName] | /ve] [/s]
[/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]
[/reg:32 | /reg:64]

1
2
# 示例:查询administrator用户 注册表项
reg query HKLM\SAM\SAM\Domains\Account\Users\Names\administrator /ve

image-20210201160101343

增加或修改/更新注册表项:

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
[/reg:32 | /reg:64]

1
2
3
4
5
6
# 添加注册表项
reg add hkcu\test
# 示例:创建一个注册表项test,并且添加一个值名称为"hello",类型为"REG_SZ",数据为"hello! this is test!"
reg add hkcu\test /v hello /t REG_SZ /d "hello! this is test!"
# 示例:修改注册表项的某个值项的数据
reg add hkcu\test /v hello /t REG_SZ /d "hello! this is test222!"

image-20210201162424093

删除注册表项:

REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64]

1
2
3
4
# 删除注册表删除hkcu\test下刚才创建的"hello"值
reg delete hkcu\test /v hello /f
# 删除注册表项
reg delete hkcu\test /f

image-20210201161842280

导入导出注册表项:

可以将注册表导出修改,删除原来的再导入

导出注册表

REG EXPORT KeyName FileName [/y] [/reg:32 | /reg:64]

Keyname ROOTKEY[\SubKey] (只是本地机器)。
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名。

1
2
# 导出到本地
reg export HKLM\SAM\SAM\Domains\Account\Users\Names\administrator C:\test.reg

导入注册表

REG IMPORT FileName[/reg:32 | /reg:64]

1
reg import C:\test.reg

参考链接:

https://blog.csdn.net/haiross/article/details/45890901

https://www.qingsword.com/qing/163.html