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

一、理解注册表

定义及作用

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

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

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

数据结构:

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

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

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

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

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

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

显示类型

数据类型

说明

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。

在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。

打开注册表图形界面1regedit

操作命令:1234567891011121314> reg -hREG QUERY /?REG ADD /?REG DELETE /?REG COPY /?REG SAVE /? REG RESTORE /?REG LOAD /?REG UNLOAD /?REG COMPARE /?REG EXPORT /?REG IMPORT /?REG FLAGS /?

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

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

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

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

增加或修改/更新注册表项:REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f] [/reg:32 | /reg:64]

123456# 添加注册表项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!"

删除注册表项:REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64]

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

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

导出注册表

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

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

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

导入注册表

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

1reg import C:\test.reg

参考链接:

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

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