一、什么是Windows注册表
Windows注册表是Windows操作系统的一个重要组成部分,其作为操作系统的配置信息库保存了系统所需的各种设置信息,包括软硬件信息、用户账户信息、程序运行时所需信息等。
每个程序的设置都会在Windows注册表中找到相应的配置信息。
Windows注册表其实就是一个类似于文件夹之间关系的树状结构,每个节点都是一个键(key),每个键下面又可以有多个键值(value),这些键和键值组成了一个中心化的配置信息库。
二、Windows注册表数据类型
Windows注册表中的每个键值都有特定的数据类型。以下是Windows注册表支持的数据类型:
- REG_BINARY:二进制数据类型
- REG_DWORD:32位二进制数据类型
- REG_QWORD:64位二进制数据类型
- REG_SZ:字符串类型
- REG_EXPAND_SZ:扩展字符串类型
- REG_MULTI_SZ:多字符串类型
其中,二进制数据类型、32位二进制数据类型和64位二进制数据类型用于存储二进制数据, REG_SZ 用于存储字符串数据, REG_EXPAND_SZ 用于存储字符串数据,REG_MULTI_SZ 用于存储多个字符串,并将其合并为一个值。
三、Windows注册表的结构和分支键
Windows注册表可以看作是一个类似于文件夹之间关系的树状结构,如下图所示:
HKEY_CLASSES_ROOT HKEY_CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS HKEY_CURRENT_CONFIG
Windows注册表的主要分支分为五个,每个分支有自己的功能:
HKEY_CLASSES_ROOT(HKEY_CLASSES_ROOT) 存放 Windows 程序中的类声明,COM 对象声明以及拓展名与相应应用程序间的关联等等。这个分支主要描述了不同文件类型的类别信息,并为这些文件类型指定一个程序来进行打开。
HKEY_CURRENT_USER(HKEY_CURRENT_USER) 接受有关当前用户(用户登录到系统后)的设置信息,例如,桌面颜色、屏幕保护程序参数和用户的基础桌面。这个分支是指当前用户。
HKEY_LOCAL_MACHINE(HKEY_LOCAL_MACHINE) 成为应用程序数据,文本屏幕设置等等的主位。这个分支存储了计算机硬件和软件的配置信息,包括认证机制、安全等级、系统硬件和软件。
HKEY_USERS(HKEY_USERS) 存储了与操作系统中所有用户帐户相关的配置信息。
HKEY_CURRENT_CONFIG(HKEY_CURRENT_CONFIG) 存储计算机启动时硬件的配置信息。
四、Windows注册表的应用
1. 操作系统优化
Windows注册表是操作系统中的一个重要元素,可以用来做很多的优化。
例如,通过在Windows注册表中增加/修改一些键值,我们可以快速开启/关闭系统中某些服务,开启/关闭某些控制面板中的选项等等,让我们的系统更加优化和稳定。
2. 监控系统配置信息
Windows注册表中记录了很多系统和应用软件的配置信息,通过注册表的监控,可以知道哪些程序启动了,哪些程序修改了键值,根据这些信息我们可以及时调整系统和程序的设置。
3. 系统维护和故障诊断
如果我们的系统遇到了故障,可以使用 Windows 注册表清理来帮助修复问题。例如,如果我们在安装新软件时遇到蓝屏,可以在Windows注册表删除错误的键值。
五、示例代码
//打开或者创建HKEY_LOCAL_MACHINE分支下的键test HKEY hKey; DWORD dwDisposition = 0; if(ERROR_SUCCESS==RegCreateKeyEx(HKEY_LOCAL_MACHINE,"test", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition)) { //写入键值为DWORD类型的数据 DWORD dwValue = 1000; if(ERROR_SUCCESS == RegSetValueEx(hKey, "dwValue", 0, REG_DWORD,(LPBYTE)&dwValue, sizeof(DWORD))) { //写入键值为字符串类型的数据 const char* strValue = "HelloWorld"; if(ERROR_SUCCESS == RegSetValueEx(hKey, "strValue", 0, REG_SZ,(LPBYTE)strValue, strlen(strValue)+1)) { printf("写入成功!"); } } RegCloseKey(hKey); }