详解常用的注册表操作函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LONG RegDeleteTree(HKEY hKey,LPCTSTR lpSubKey); 参数和返回值同 RegDeleteKey()。 和 RegDeleteKey()的区别是本函数能够删除有子键的键。
5、枚举子键
LONG RegEnumKey( HKEY hKey, DWORD dwIndex, LPTSTR lpName, DWORD cbName )
Reserved:只能赋值 0
lpClass:键的类型,可以用 NULL 赋值。
dwOptions:这个参数可以取如下的值
REG_OPTION_NON_VOLATILE 键的信息在系统重启后保存到文件中。
REG_OPTION_VOLATILE
键的信息保存在内存中,当系统关闭后,这些信息不被保存。
samDesired:权限设置。可以去如下值
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明:
用法基本同 RegEnumKey();
三 常用操作键值的函数
1、写键值
LONG RegSetValue( HKEY hKey, LPCTSTR lpSubKey, DWORD dwType, LPCTSTR lpData,
DWORD cbData );
参数说明:
HKEY hKey 已经打开的键的句柄
DWORD dwIndex
子键的索引,从 0 开始。 LPTSTR lpName
指向保存子
键名的缓冲区的字符指针。注意仅是该子键的名,不包括其层次结构。
DWORD cbName 表示 lpName 指向的缓冲区的大小
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
参数说明:
HKEY hKey
根键名或已经打开的键的句柄(注意那本函数没有 LPCTSTR lpSubKey 来
指定子键名,所以 hKey 必须是打开该子键的句柄)
LPCTSTR lpValueName 键值的名称 NULL 表示默认键值。
DWORD Reserved 保留,必须赋值 0.
DWORD dwType 键值的类型,具体见下面的键值类型表。
PHKEY phkResult 指向 HKEY 类型变量的指针。本参数用于返回创建的键的句 柄。 返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
LONG RegCreateKeyEx(
HKEY hKey,
LPCTSTR lpSubKey,
DWORD Reserved,
LPTSTR lpClass,
允许查询值项
KEY_READ
允许枚举子项、修改通知和查询值项
KEY_SET_VALUE
允许设置注册表项的值项
KEY_WRITE
允许创建子项和设置值项
lpSecurityAttributes:设置创建的键的句柄是否可以用于子进程中,赋值为 NULL 表示不能
用于子进程中。
phkResult:出参,保存创建键的句柄。
CONST BYTE *lpData 指向键值的数据。注意本参数是 CONST BYTE *类型,赋值时要
做强制转换。
DWORD cbData
数 据 长 度 。 注 意 写 入 的 是 REG_SZ, REG_EXPAND_SZ, or
说明:
要枚举 HKEY_CLASSES_ROOT\pro 键下的所有子键。假设该子键已经用 RegOpenKeyEx()
函数打开,句柄保存在 hRe 中,现枚举将下的所有。
char
cSubKey[256]={'\0'};
DWORD dwIndex=0;
while(ERROR_SUCCESS==RegEnumKey(hRe,dwIndex,cSubKey,sizeof(cSubKey)))
Reserved );
参数说明:
前两个参数同 RegDeleteKey()
REGSAM samDesired:本参数有两个指定的值
KEY_WOW64_32KEY 32 位注册表
KEY_WOW64_64KEY
64 位的注册表
DWORD Reserved: 保留参数,仅能够赋值 0。
返回值:
同 RegDeleteKey()。
hKey 用根键名,lpSubKey 指定要删除的键。这样无论该键是否打开都可以删除。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。 说明: 本函数仅能够删除没有子键的键。删除时键中的所有键值将一并删除。
LONG RegDeleteKeyEx( HKEY hKey, LPCTSTR lpSubKey, REGSAM samDesired, DWORD
KEY_ALL_ACCESS
允许所有访问权限
KEY_CREATE_LINK
允许创建注册表项的链接
KEY_CREATE_SUB_KEY
允许创建子项
KEY_ENUMERATE_SUB_KEYS
允许枚举注册表项的子项
KEY_EXECUTE
允许读操作
KEY_NOTIFY
允许注册表项的修改通知
KEY_QUERY_VALUE
源自文库
数据的长度
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明:
本函数仅能够设置键的默认键值。
LONG RegSetValueEx( HKEY hKey, LPCTSTR lpValueName, DWORD Reserved, DWORD
dwType, CONST BYTE *lpData, DWORD cbData )
lpdwDisposition : 出 参 。 当 返 回 REG_CREATED_NEW_KEY 表 示 为 新 建 的 键 , 返 回
REG_OPENED_EXISTING_KEY 表示键已经存在了。
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明: RegCreateKey()和 RegCreateKeyEx()访问的键不存在时创建键,如果键存在,就打开 该键。
PFILETIME lpftLastWriteTime
);
参数说明:
HKEY hKey 已经打开的键的句柄
DWORD dwIndex
子键的索引,从 0 开始。 LPTSTR lpName
指向保存子
键名的缓冲区的字符指针。注意仅是该子键的名,不包括其层次结构。
LPDWORD lpcbName 本参数既是入参也是出参,输入 lpName 指向的缓冲区大小,函数
2、打开键 打开将的函数有 RegOpenKey()和 RegOpenKeyEx()。
LONG RegOpenKey( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult) 参数说明: HKEY hKey;可以用根键名,也可以用已经打开的键的句柄。 LPCTSTR lpSubKey:同 RegCreateKey()lpSubKey。 PHKEY phkResult:出参,HKEY 类型变量的指针,保存打开键的句柄。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。 说明: 如果 HKEY_CLASSES_ROOT\pro 这个键已经打开,并且将句柄保存在 hRe 中。那么要打开 HKEY_CLASSES_ROOT\pro\subpro1 就可以用 RegOpenKey(hRe,“subpro1”,&hRe1);来 打开 subpro1 子键。
LONG RegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );
参数说明: 在 RegOpenKey()和基础上 RegOpenKeyEx 增加了两个参数 DWORD ulOptions, samDesired。其他参数同 RegOpenKey() DWORD ulOptions 备用参数,只用赋值 0。 REGSAM samDesired 同 RegCreateKeyEx()的 samDesired 参数。 返回值: 成功返回 ERROR_SUCCESS,失败放回非零值。
打开键有两个函数 RegCreateKey()和 RegCreateKeyEx()。“Ex”表示扩展的意思,比 前一个功能更全面些。
LONG RegCreateKey( HKEY hKey, LPCTSTR lpSubKey, PHKEY phkResult); 参数说明:
HKEY hKey 键 的 句 柄 , 在 这 个 函 数 中 就 是 指 根 键 的 句 柄 , 就 是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER 等 5 个根键的名称。
DWORD dwOptions,
REGSAM samDesired,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
PHKEY phkResult,
LPDWORD lpdwDisposition,
)
参数说明:
hKey:
同 RegCreateKey()
lpSubKey:同 RegCreateKey()
REGSAM
3、关闭键
LONG RegCloseKey( HKEY hKey );
参数说明
HKEY hKey
已经打开的键的句柄。
返回值:
成功返回 ERROR_SUCCESS,失败放回非零值。
说明:
本函数用于关闭打开的键。
当键不使用后要用这个函数关闭。
4、删除键 LONG RegDeleteKey( HKEY hKey, LPCTSTR lpSubKey ); 参数说明: 两个参数的作用同 RegOpenKey()的同名参数。 注意:hKey 只能是根键名,如果传人的是已经打开的键将删除失败。
{
MessageBox(cSubKey);
//用对话框显示子键名
memset(cSubKey,0,sizeof(cSubKey)); //初始化数组
dwIndex++; //索引加 1
}
RegEnumKeyEx LONG RegEnumKeyEx(
HKEY hKey, DWORD dwIndex, LPTSTR lpName, LPDWORD lpcbName, LPDWORD lpReserved, LPTSTR lpClass, LPDWORD lpcbClass,
返回时输入写入缓冲区的字符长度,不包括字符串结束标识符。
LPDWORD lpReserved 保留,仅能够赋值 NULL。
LPTSTR lpClass 指向保存子键类型的缓冲区的字符指针。
LPDWORD lpcbClass 用途同 lpcbName
PFILETIME lpftLastWriteTime 出参,FILETIME 结构体指针,保存子键最后修改的时间。
参数说明:
HKEY hKey
根键名或已经打开的键的句柄
LPCTSTR lpSubKey 子键名,如果 hKey 已经是该子键的句柄,本参数可以赋值 NULL
DWORD dwType
键值的类型,本参数仅能够赋值 REG_SZ,其他键值类型见最后的
键值类型表。
LPCTSTR lpData
键值的数据
DWORD cbData
详解常用的注册表操作函数
一 注册表简介 在“运行”对话框中输入 regedit,回车就打开了 windows 的注册表编辑器。如下图:
注册表编辑器对话框左边树显示了注册表的层次,第一层是 5 个以 HKEY 开头的根键, 在 windows 提供的操作注册表的 API 函数中可以直接使用。下面每个节点叫子键,也可以 叫项。用鼠标单击某个键后,右边的列表区域将显示该键的键值。键值包含名称、类型和数 据三个部分。每个键下面有一个默认的键值,类型为 REG_SZ(以 NULL 结尾的字符串), 在 windows 提供的 API 函数中,访问这个默认值在对应参数中输入 NULL 就可以了。下面 会具体提到。 二 常用操作键的函数 1、创建键
LPCTSTR lpSubKey 表示以 NULL 结尾的字符串指针。该字符串中保存了要创建的 子键的名称和结构。如要在 HKEY_CLASSES_ROOT 的根键下创建一个名为“pro”的子键, 直接为用“pro”。如果要在 pro 下面在创建一个 subpro1。则赋值”pro\\subpro1“。注意:键名 与键名之间用两个下斜杠,这样表示转义;创建 subpro1 子键的时候并不要求 pro 子键已经 存在。如果不存在就一并创建了。