Windows注册表学习
以下是对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