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。
打开注册表图形界面
1 | regedit |
操作命令:
1 | > reg -h |
权限设置:
为用户赋予相应权限,可以参考Regini修改注册表权限命令:
1 | # [1 8 17]表示赋予 administrator、everyone、system分别是完全控制、只读、完全控制权限 |
查询注册表项:
REG QUERY KeyName [/v [ValueName] | /ve] [/s]
[/f Data [/k] [/d] [/c] [/e]] [/t Type] [/z] [/se Separator]
[/reg:32 | /reg:64]
1 | # 示例:查询administrator用户 注册表项 |
增加或修改/更新注册表项:
REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]
[/reg:32 | /reg:64]
1 | # 添加注册表项 |
删除注册表项:
REG DELETE KeyName [/v ValueName | /ve | /va] [/f] [/reg:32 | /reg:64]
1 | # 删除注册表删除hkcu\test下刚才创建的"hello"值 |
导入导出注册表项:
可以将注册表导出修改,删除原来的再导入
导出注册表
REG EXPORT KeyName FileName [/y] [/reg:32 | /reg:64]
Keyname ROOTKEY[\SubKey] (只是本地机器)。
ROOTKEY [ HKLM | HKCU | HKCR | HKU | HKCC ]
SubKey 所选 ROOTKEY 下的注册表项的全名。
1 | # 导出到本地 |
导入注册表
REG IMPORT FileName[/reg:32 | /reg:64]
1 | reg import C:\test.reg |
参考链接: