Creates or opens a registry key.
CreateRegistryKey(nRegKey, cKeyName [, nAccessRights [, nOptions [, cClass]]])
Parameters
- nRegKey
Either a registry handle returned from OpenRegistryKey or one of the following key constants.
Constant Description HKEY_CLASSES_ROOT Registry entries subordinate to this key define types (or classes) of documents and the properties associated with those types. Shell and COM applications use the information stored under this key.
This key also provides backward compatibility with the Windows 3.1 registration database by storing information for DDE and OLE support. File viewers and user interface extensions store their OLE class identifiers in HKEY_CLASSES_ROOT, and in-process servers are registered in this key.
This handle should not be used in a service or an application that impersonates different users.HKEY_CURRENT_CONFIG Contains information about the current hardware profile of the local computer system. The information under HKEY_CURRENT_CONFIG describes only the differences between the current hardware configuration and the standard configuration. Information about the standard hardware configuration is stored under the Software and System keys of HKEY_LOCAL_MACHINE.
HKEY_CURRENT_CONFIG is an alias for HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current.HKEY_CURRENT_USER Registry entries subordinate to this key define the preferences of the current user. These preferences include the settings of environment variables, data about program groups, colors, printers, network connections, and application preferences. This key makes it easier to establish the current user's settings; the key maps to the current user's branch in HKEY_USERS. In HKEY_CURRENT_USER, software vendors store the current user-specific preferences to be used within their applications. Microsoft, for example, creates the HKEY_CURRENT_USER\Software\Microsoft key for its applications to use, with each application creating its own subkey under the Microsoft key.
The mapping between HKEY_CURRENT_USER and HKEY_USERS is per process and is established the first time the process references HKEY_CURRENT_USER. The mapping is based on the security context of the first thread to reference HKEY_CURRENT_USER. If this security context does not have a registry hive loaded in HKEY_USERS, the mapping is established with HKEY_USERS\.Default. After this mapping is established it persists, even if the security context of the thread changes.
All registry entries in HKEY_CURRENT_USER except those under HKEY_CURRENT_USER\Software\Classes are included in the per-user registry portion of a roaming user profile. To exclude other entries from a roaming user profile, store them in HKEY_CURRENT_USER_LOCAL_SETTINGS.
This handle should not be used in a service or an application that impersonates different users. Instead, call the RegOpenCurrentUser function.HKEY_CURRENT_USER_LOCAL_SETTINGS Registry entries subordinate to this key define preferences of the current user that are local to the machine. These entries are not included in the per-user registry portion of a roaming user profile.
Windows Server 2008, Windows Vista, Windows Server 2003, and Windows XP/2000: This key is supported starting with Windows 7 and Windows Server 2008 R2.HKEY_LOCAL_MACHINE Registry entries subordinate to this key define the physical state of the computer, including data about the bus type, system memory, and installed hardware and software. It contains subkeys that hold current configuration data, including Plug and Play information (the Enum branch, which includes a complete list of all hardware that has ever been on the system), network logon preferences, network security information, software-related information (such as server names and the location of the server), and other system information. HKEY_PERFORMANCE_DATA Registry entries subordinate to this key allow you to access performance data. The data is not actually stored in the registry; the registry functions cause the system to collect the data from its source. HKEY_PERFORMANCE_NLSTEXT Registry entries subordinate to this key reference the text strings that describe counters in the local language of the area in which the computer system is running. These entries are not available to Regedit.exe and Regedt32.exe.
Windows 2000: This key is not supported.HKEY_PERFORMANCE_TEXT
Registry entries subordinate to this key reference the text strings that describe counters in US English. These entries are not available to Regedit.exe and Regedt32.exe.
Windows 2000: This key is not supported.HKEY_USERS Registry entries subordinate to this key define the default user configuration for new users on the local computer and the user configuration for the current user.
- cKeyName
The name of the subkey which should be created.
If cKeyName is an empty string, the function returns a new handle to the key specified by nRegKey.
- nAccessRights (optional)
default = KEY_ALL_ACCESS
One or a combination of the following values. Constant Description KEY_ALL_ACCESS Combines the STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, and KEY_CREATE_LINK access rights. KEY_CREATE_LINK Reserved for system use. KEY_CREATE_SUB_KEY Required to create a subkey of a registry key. KEY_ENUMERATE_SUB_KEYS Required to enumerate the subkeys of a registry key. KEY_EXECUTE Equivalent to KEY_READ. KEY_NOTIFY Required to request change notifications for a registry key or for subkeys of a registry key. KEY_QUERY_VALUE Required to query the values of a registry key. KEY_READ Combines the STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, and KEY_NOTIFY values. KEY_SET_VALUE Required to create, delete, or set a registry value. KEY_WOW64_32KEY Indicates that an application on 64-bit Windows should operate on the 32-bit registry view. For more information, see Accessing an Alternate Registry View.
This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.
Windows 2000: This flag is not supported.KEY_WOW64_64KEY Indicates that an application on 64-bit Windows should operate on the 64-bit registry view. For more information, see Accessing an Alternate Registry View.
This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.
Windows 2000: This flag is not supported.KEY_WRITE Combines the STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, and KEY_CREATE_SUB_KEY access rights. Note
For more information have a look at Registry Key Security and Access Rights.
- nOptions (optional)
default = REG_OPTION_NON_VOLATILE
One of the following values:
Value Description REG_OPTION_BACKUP_RESTORE If this flag is set, the function ignores the samDesired parameter and attempts to open the key with the access required to backup or restore the key. If the calling thread has the SE_BACKUP_NAME privilege enabled, the key is opened with the ACCESS_SYSTEM_SECURITY and KEY_READ access rights. If the calling thread has the SE_RESTORE_NAME privilege enabled, the key is opened with the ACCESS_SYSTEM_SECURITY and KEY_WRITE access rights. If both privileges are enabled, the key has the combined access rights for both privileges. For more information, see Running with Special Privileges. REG_OPTION_CREATE_LINK This key is a symbolic link. The target path is assigned to the L"SymbolicLinkValue" value of the key. The target path must be an absolute registry path. Registry symbolic links should be used only when absolutely necessary for application compatibility. REG_OPTION_NON_VOLATILE This key is not volatile; this is the default. The information is stored in a file and is preserved when the system is restarted. The RegSaveKey function saves keys that are not volatile. REG_OPTION_VOLATILE All keys created by the function are volatile. The information is stored in memory and is not preserved when the corresponding registry hive is unloaded. For HKEY_LOCAL_MACHINE, this occurs when the system is shut down. For registry keys loaded by the RegLoadKey function, this occurs when the corresponding RegUnLoadKey is performed. The RegSaveKey function does not save volatile keys. This flag is ignored for keys that already exist.
- cClass (optional)
default = NULL
The user-defined class type of this key. This parameter may be ignored.
Return Value
A handle (numeric) to the registry key.
Remarks
The CreateRegistryKey function creates all missing keys in the specified path. An application can take advantage of this behavior to create several keys at once. For example, an application can create a subkey four levels deep at the same time as the three preceding subkeys by specifying a string of the following form for the lpSubKey parameter: "subkey1\subkey2\subkey3\subkey4"
Note that this behavior will result in creation of unwanted keys if an existing key in the path is spelled incorrectly.
An application cannot create a key that is a direct child of HKEY_USERS or HKEY_LOCAL_MACHINE, but it can create subkeys in lower levels of the HKEY_USERS or HKEY_LOCAL_MACHINE trees.
See Also
Reference
ARegistryKeys
ARegistryValues
CancelRegistryChange
CloseRegistryKey
DeleteRegistryKey
FindRegistryChange
OpenRegistryKey
ReadRegistryKey
RegistryHiveToObject
RegistryValuesToObject
WriteRegistryKey