RegCreateKeyEx函数创建指定的键。如果密钥已经存在于注册表中,则该函数将打开它。
LONG RegCreateKeyEx
HKEY 【的hKeyru-Latn】, | //处理一个开放的密钥 |
LPCTSTR 【lpSubKey】, | //子项名称的地址 |
DWORD 【保留的】, | //保留 |
LPTSTR 【lpClass】, | //类字符串的地址 |
DWORD 【dwOptions】, | //特殊选项标志 |
REGSAM 【Sndesired】, | //所需的安全访问 |
LPSECURITY_ATTRIBUTES 【lpSecurityAttributes】, | //关键安全结构的地址 |
PHKEY 【phkResultnl】, | //打开句柄缓冲区的地址 |
LPDWORD 【lpdwDisposition】 | //处置值缓冲区的地址 |
); |
参数
【的hKeyru-Latn】
标识当前打开的键或任何以下预定义保留句柄值:
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
由RegCreateKeyEx功能打开或创建的密钥是由【的hKeyru-Latn】参数标识的密钥的子项。
【lpSubKey】
指向一个以null结束的字符串,指定此函数打开或创建的子项的名称。指定的子项必须是由【的hKeyru-Latn】参数标识的键的子项。该子项不能以反斜杠字符('\\')开头。此参数不能为NULL。
【保留的】
Reserved; must be zero.
【lpClass】
指向指定此键的类(对象类型)的以null结尾的字符串。如果密钥已经存在,则忽略该参数。
【dwOptions】
指定键的特殊选项。此参数可以是以下值之一。
值 | 含义 |
REG_OPTION_NON_VOLATILE | 这个关键是不挥发的;这是默认值。信息存储在文件中,并在系统重新启动时保留。RegSaveKey功能可以保存不易变化的键。 |
REG_OPTION_VOLATILE | Windows NT:这个键是不稳定的信息存储在内存中,并且在重新启动系统时不会被保留。RegSaveKey功能不保存挥发性键。如果密钥已经存在,则忽略该标志。 Windows 95:该值在Windows 95中被忽略。如果指定了REG_OPTION_VOLATILE,则RegCreateKeyEx函数创建一个非易失性密钥,并返回ERROR_SUCCESS。 |
REG_OPTION_BACKUP_RESTORE | Windows NT:如果设置了此标志,该函数将忽略【Sndesired】参数,并尝试使用所需的访问权限来打开该密钥以备份或还原密钥。如果调用线程启用了SE_BACKUP_NAME特权,则使用ACCESS_SYSTEM_SECURITY和KEY_READ访问来打开该键。如果调用线程启用了SE_RESTORE_NAME特权,则使用ACCESS_SYSTEM_SECURITY和KEY_WRITE访问来打开该键。如果启用了两个权限,则密钥具有两个权限的组合访问。 Windows 95:此标志被忽略。Windows 95不支持其注册表中的安全性。 |
【Sndesired】
指定一个访问掩码,指定新密钥的所需安全访问。此参数可以是以下值的组合:
值 | 含义 |
KEY_ALL_ACCESS | 组合KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYS,KEY_NOTIFY,KEY_CREATE_SUB_KEY,KEY_CREATE_LINK和KEY_SET_VALUE访问。 |
KEY_CREATE_LINK | 创建符号链接的权限。 |
KEY_CREATE_SUB_KEY | 创建子项的权限。 |
KEY_ENUMERATE_SUB_KEYS | 枚举子项的权限。 |
KEY_EXECUTE | 读访问权限 |
KEY_NOTIFY | 许可变更通知。 |
KEY_QUERY_VALUE | 查询子密钥数据的权限。 |
KEY_READ | 组合KEY_QUERY_VALUE,KEY_ENUMERATE_SUB_KEYS和KEY_NOTIFY访问。 |
KEY_SET_VALUE | 设置子密钥数据的权限。 |
KEY_WRITE | 组合KEY_SET_VALUE和KEY_CREATE_SUB_KEY访问。 |
【lpSecurityAttributes】
指向SECURITY_ATTRIBUTES结构的指针,用于确定返回的句柄是否可以由子进程继承。如果【lpSecurityAttributes】为NULL,则无法继承该句柄。
Windows NT:结构的lpSecurityDescriptor成员指定新密钥的安全描述符。如果【lpSecurityAttributes】为NULL,则该密钥将获取默认安全描述符。
Windows 95:结构的lpSecurityDescriptor成员将被忽略。
【phkResultnl】
指向接收打开或创建的键的句柄的变量。
【lpdwDisposition】
指向接收以下处理值之一的变量:
值 | 含义 |
REG_CREATED_NEW_KEY | 关键是不存在并被创建。 |
REG_OPENED_EXISTING_KEY | 关键存在,只是打开而不改变。 |
返回值
如果函数成功,则返回值为ERROR_SUCCESS。
如果函数失败,返回值是在WINERROR.H中定义的非零错误代码。您可以使用带有FORMAT_MESSAGE_FROM_SYSTEM标志的FormatMessage函数来获取错误的一般描述。
备注
RegCreateKeyEx函数创建的关键是没有值。应用程序可以使用RegSetValue或RegSetValueEx功能设置键值。
必须使用KEY_CREATE_SUB_KEY访问权限打开【的hKeyru-Latn】参数所标识的密钥。要打开该键,请使用RegCreateKeyEx或RegOpenKeyEx功能。
应用程序无法在HKEY_USERS或HKEY_LOCAL_MACHINE下创建密钥。
应用程序可以使用RegCreateKeyEx临时锁定注册表的一部分。当锁定过程创建一个新密钥时,它接收到处理值REG_CREATED_NEW_KEY,表示它“拥有”锁定。尝试创建相同密钥的另一个进程接收到处理值REG_OPENED_EXISTING_KEY,表示另一进程已拥有该锁。
也可以看看
RegCloseKey, RegCreateKey, RegDeleteKey, RegOpenKey, RegOpenKeyEx, RegSaveKey, SECURITY_ATTRIBUTES