曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6190|回复: 0
打印 上一主题 下一主题

[注册表] RegCreateKeyEx()/RegCreateKey() -- 新建子键

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2013-4-18 00:14:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 09:33 , Processed in 0.076621 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表