RegCreateKeyEx() 函数用来新建一个键,如果该键已经存在,那么就打开该键。注意,键名大小写不敏感。原型如下:LONG WINAPI RegCreateKeyEx(
__in HKEY hKey,
__in LPCTSTR lpSubKey,
__reserved DWORD Reserved,
__in_opt LPTSTR lpClass,
__in DWORD dwOptions,
__in REGSAM samDesired,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes,
__out PHKEY phkResult,
__out_opt LPDWORD lpdwDisposition
); 第 1 个参数 hKey 是个输入参数,是一个已经打开键的句柄。之前被打开的键必须要以 KEY_CREATE_SUB_KEY 的访问权限打开,这样在调用该函数时才能创建一个新的子键。这个句柄由 RegCreateKeyEx() 或 RegOpenKeyEx() 函数返回,或者是下面预定义键中的一个:HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
第 2 个参数 lpSubKey 是输入参数,是欲新建子键的名字,它必须是 kHey 指定键的子键,并且该参数不能为 NULL 。
第 3 个参数 Reserved 保留,必须为 0 。
第 4 个参数 lpClass 是用户为键自定义的一个类类型。建议用 NULL 。
第 5 个参数 dwOptions 通常取 0 值( REG_OPTION_NON_VOLATILE),另一个与之相反的值是 REG_OPTION_VOLATILE 。非易挥发(Nonvolatile)的注册表信息会存在在文件中,并且在系统重启时也会得到保存;而易挥发注册表键则是保存在内存中,系统重启时则随之丢失。
第 6 个参数 samDesired 和 RegOpenKeyEx() 函数中的一样。
第 7 个参数 lpSecurityAttributes 是安全属性指针,如果为 NULL,那么返回的句柄将不会被子进程所继承。
第 8 个参数 phkResult 是个输出参数,用以要创建的子键的句柄。
第 9 个参数 lpdwDisposition 是个输出参数,为一个 DWORD 类型变量指针,它会告诉你你要创建的键是已经存在的还是未存在并被创建的。
测试代码:
[C++] 纯文本查看 复制代码 #include "stdafx.h"
#include <Windows.h>
#include <Winreg.h>
void Add_Key(HKEY hKey)
{
HKEY hSubKey;
DWORD dwKeyValue = 110;
RegCreateKeyEx(hKey, _T("RegAdder"), 0, NULL, NULL,KEY_READ | KEY_WRITE, NULL, &hSubKey, NULL);
if ( ERROR_SUCCESS != RegSetValueEx(hSubKey, TEXT("TEST"), NULL, REG_DWORD, (const byte*)&dwKeyValue, sizeof(DWORD))) {
printf ("Error\n");
}
}
int _tmain(int argc, _TCHAR* argv[])
{
HKEY hMyTestKey;
if ( RegOpenKeyEx ( HKEY_CURRENT_USER, TEXT("SOFTWARE"),
0, KEY_READ | KEY_WRITE,
&hMyTestKey) == ERROR_SUCCESS)
{
Add_Key(hMyTestKey);
}
return 0;
}
运行该程序,然后观察注册表是否创建相应的子键及键值是否成功:
![]()
在打开注册表时,你可能需要刷新(F5)一下才能看到结果。
此外,对于老的 RegCreateKey() 函数示例可参考:http://www.groad.net/bbs/read.php?tid-7731.html |