当前位置:C++技术网 > 资讯 > 注册表编程系列:3 创建注册表键

注册表编程系列:3 创建注册表键

更新时间:2015-06-24 20:55:45浏览次数:1+次

    创建注册表键前,需要打开注册表,关于打开注册表的文章,请阅读:《注册表编程系列--打开和关闭注册表键》

    我们打开了注册表后,就得到了注册表的句柄。有了这个句柄,我们就可以开始操作注册表了。
    我们使用注册表,基本是使用注册表存储软件中的一些信息,这样的话,我们就需要创建注册表键,然后在键下面存放我们的信息。
    下面我们讲解如何创建注册表键。

    使用Windows的API函数RegCreateKeyEx来创建。
    该函数用来创建注册表键,如果该键已经存在,则打开它(注册表键不区分大小写)

LONG RegCreateKeyEx(
    HKEY hKey,     // - 要创建的键句柄
    LPCTSTR lpSubKey, // - 子键名称
    DWORD Reserved,   // - 保留值,必须为0
    LPTSTR lpClass,   // - 键的类型
    DWORD dwOptions,  // - 特殊选项
    REGSAM samDesired,// - 想请求的安全访问控制方式
    LPSECURITY_ATTRIBUTES lpSecurityAttributes, // - 安全属性 - 继承
    PHKEY phkResult,               // - 键句柄
    LPDWORD lpdwDisposition  // - 返回的策略指针);
  
参数详解:
hKey
  要创建的键的句柄。调用该函数的进程必须拥有KEY_CREATE_SUB_KEY的权力。该句柄可以是RegCreateKeyEx或者RegOpenKeyEx的返回值,也可以是以下预定义的值:
  HKEY_CLASSES_ROOT,HKEY_CURRENT_CONFIG,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS
 
lpSubKey
 子键名称。该参数不能为空。参数中不能存在(/)

Reserved
 保留值,必须为0。微软的规定,不用问为什么,暂时没用上,就设置为0.
 
lpClass
 指向一个字符串,该字符串定义了该键的类型。可以为空。该参数可以在操作本地和远程注册表时使用。
 
dwOptions
  该参数可以是以下值

REG_OPTION_BACKUP_RESTORE,0x00000004L 
REG_OPTION_NON_VOLATILE,0x00000000L ,一般使用该值
REG_OPTION_VOLATILE,0x00000001L 

 

samDesired
 定义访问权限。可选权限列表如下:

KEY_CREATE_LINK 允许创建符号链接。
KEY_CREATE_SUB_KEY 允许创建子键。
KEY_ENUMERATE_SUB_KEYS 允许枚举子键。
KEY_EXECUTE 可读。
KEY_NOTIFY 允许更改通知。 
KEY_QUERY_VALUE 允许查询子键的值。
KEY_SET_VALUE 允许设置子键的值。 
KEY_ALL_ACCESS 除了SYNCHRONIZE权限外的所有权限。
KEY_READ 组合了 STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, 和 KEY_NOTIFY 权限。
KEY_WOW64_64KEY Windows XP: 允许 64位或者32位应用打开64位的键。 
KEY_WOW64_32KEY Windows XP: 允许 64位或者32位应用打开32位的键。
KEY_WRITE :组合了 STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, 和 KEY_CREATE_SUB_KEY这些权限。

lpSecurityAttributes
 定义返回的句柄是否可以被子进程继承,为NULL时不能继承。
 
phkResult
 保存返回的键的句柄。
 
lpdwDisposition
 可以是以下值。如果为空,则不返回。这是用来确定此函数是创建了一个新的键还是打开了一个已经存在的键。

REG_CREATED_NEW_KEY,0x00000001L 该键是新创建的键。
REG_OPENED_EXISTING_KEY,0x00000002L 该键是已经存在的键。
  
返回值:成功则返回 ERROR_SUCCESS.失败则返回一个非零错误码。可以使用 FormatMessage格式化消息详细描述。
 
附加说明: 该函数创建的键没有键值。应用程序不能创建HKEY_USERS 或者 HKEY_LOCAL_MACHINE的直接子键。

使用代码例子:

HKEY hkSub;
RegCreateKeyEx(HKEY_CURRENT_USER, _T("mykey"), 0,_T(""), 0, KEY_READ | KEY_WRITE, NULL, &hkSub, NULL); 

这是代码的基本句法,可以参考着使用。