注册表初识

转自 http://blog.csdn.net/xiaoxiaohai123/article/details/1685153 (部分修改)

参考《深入解析Windows操作系统》(第四版) 潘爱民 译

一、简介:

注册表(Registry),本质上来说,就是一个数据库,用于存储系统应用程序的设置信息,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用,其结构类似于磁盘卷的结构。注册表包含了(key)和 (value)。键类似于磁盘的目录,而值则好比磁盘上的文件。键是一个容器,可以包含其他的键(子键)和值,而值存储的是数据。最顶级的键是根键(Root key),只有根键才不是子键。

注册表有6个根键,你不能加入新的根键,也不能删除已有的根键。打开注册表就能看见其结构。打开方法:(1)直接双击regedit.exe,一般位于C:\Windows目录下(操作系统装在C盘);(2)“开始”----“运行“,在出现对话框中输入regedit,然后回车即可。

注册表的每个根键句柄都是固定不变的,如下表所示:

键名句柄键名句柄
HKEY_CLASSES_ROOT&H80000000HKEY_DYN_DATA&H80000006
HKEY_CURRENT_CONFIG&H80000005HKEY_LOCAL_MACHINE&H80000002
HKEY_CURRENT_USER&H80000001HKEY_USERS&H80000003
注册表数据类型
程序中要用到的注册表数据类型如下表所示:
REG_BINARY二进制数据
REG_DWORD32位双字
REG_DWORD_LITTLE_ENDIAN大计数法格式32位数字,一个字的有效字节是高端字
REG_DWORD_BIG_ENDIAN大计数法格式32位数字,一个字的有效字节是低端字
REG_EXPAND_SZ空终止字符串,包括对"&TEMP&"之类环境变量的引用
REG_LINK单一代码符号链
REG_MULTI_SZ定义包括空终止字符串的数组,数组被两个实际的空字符串结束
REG_NONE未定义值类型
REG_RESOUSE_LIST设备驱动程序列表
REG_SZ空字符串,是保存字符串的最通用格式

二、API操作

既然注册表对于操作系统来说,至关重要。那么对于注册表的修改,就必须十分谨慎。(如果你掌握了安全的修改注册表的方法,还是能做出很多意想不到的效果滴)一般而言,我们不推荐直接编辑注册表,而微软也为我们提供了一下API来操作注册表,本文就借助简单的例子介绍一下常用的几个函数的运用。

(1)RegCreateKeyEx ——创建一个键,如果这个键已经存在的话,就相当是把它打开了。

其声明如下:(九个参数)

LONG RegCreateKeyEx(
  HKEY hKey,                
  LPCTSTR lpSubKey,         
  DWORD Reserved,           
  LPTSTR lpClass,           
  DWORD dwOptions,          
  REGSAM samDesired,        
  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  PHKEY phkResult,        
  LPDWORD lpdwDisposition   
);
参数介绍:
hKey:这是一个已经打开的键的句柄,看来是要在一个已经打开的键建立一个子键了。就好象在一个已经存在的目录下建立一个字目录一样。如果你开始没有一个已经打开的键的句柄,则hKey可以是如下的值:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
HKEY_DYN_DATA (只能是Win98,Win95,WinMe系统)

lpSubKey:一个字符串,不用说是什么意思了吧?就是说你要把你的注册表键放在哪个位置了。注意:lpSubKey不能为NULL,且字符串中 \ 应为 \\ ;
Reserved:保留的,必须是0。
lpClass:一个字符串,据说是指定你要建立的键的类型,设它为NULL;
dwOptions:对你建立的键的一些选项。可以是这些值:REG_OPTION_NON_VOLATILE,REG_OPTION_VOLATILE,REG_OPTION_BACKUP_RESTORE
samDesired:对这个新建的键的访问权限了,一般设置为KEY_ALL_ACCESS;
lpSecurityAttributes:可设为NULL。
phkResult:这可是个很重要的参数了,建立一个键后,这个键的句柄就放在这里,以后操作就全靠它了。注意了,它是一个指向HKEY的指针。
lpdwDisposition:又是一个指针,调用完此函数后,可以通过它来检测是打开了一个已经存在的键(REG_OPENED_EXISTING_KEY),还是建立了一个键(REG_CREATED_NEW_KEY)。

当创建一个键成功,其返回值为ERROR_SUCCESS,否则,则为失败。

#include<windows.h>
void main()
{
 DWORD dwRes;
 HKEY hk;
 if(ERROR_SUCCESS==
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
 "SOFTWARE//Carrier Studio//Hello",  
0,                                  
NULL,                              
REG_OPTION_NON_VOLATILE,           
KEY_ALL_ACCESS,                    
NULL,                              
&hk,
&dwRes)
printf("Create  key  Successful!\n");
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值