Registry is organized as a hierarchical tree. The Registry keys are folder like entries and the keys can contain string values ( REG_SZ), dword (REG_DWORD) values etc under them. This article discusses, how to Create Registry Keys, String entries, DWORD entries and set their values.
Registry Key Creation using RegCreateKey:
The Registry keys can be created under any other keys except at the root level. One more point to be noted is applications cannot create entries directly under HKEY_USERS and HKEY_LOCAL_MACHINE. The sample code for creating a registry key is as follows.
HKEY hKey;
DWORD dwDisp = 0;
LPDWORD lpdwDisp = &dwDisp;
CString l_strExampleKey = “SOFTWARE\TestKey”;
LONG iSuccess = RegCreateKeyEx( HKEY_CURRENT_USER, l_strExampleKey, 0L,NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,lpdwDisp);
if(iSuccess == ERROR_SUCCESS)
{
RegCloseKey(hKey);
}
The above piece of code will create an entry under HKEY_CURRENT_USERSoftwareTestKey.
Registry Values – Creating and Modifying values:
There are two types of values which might need to be modified. One is creating and setting the value for a REG_DWORD entry and the next is creating and setting the value of REG_SZ entry.
Registry Values – REG_DWORD entries using RegSetValueEx:
This is achieved by using the function RegSetValueEx. This function takes parameters of the Handle to the Registry Key, DWORD Variable name, DWORD value etc., A sample implementation for RegSetValueEx is as follows.
HKEY hKey;
DWORD dwDisp = 0;
LPDWORD lpdwDisp = &dwDisp;
CString l_strExampleKey = “SOFTWARE\Microsoft\Exchange\MSExchangeAdminCommon”;
CString l_strDWordSample = “DWORDSample”;
DWORD dwVal = 100;
LONG iSuccess = RegCreateKeyEx( HKEY_CURRENT_USER, l_strExampleKey, 0L,NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,lpdwDisp);
if(iSuccess == ERROR_SUCCESS)
{
RegSetValueEx (hKey, l_strDWordSample, 0L, REG_DWORD,(CONST BYTE*) &dwVal, sizeof(DWORD));
}
Now the REG_DWORD variable “SOFTWARE\Microsoft\Exchange\MSExchangeAdminCommon\ DWORDSample” will be set with value of 100.
In the examples of this article, we have created a new key and used it. If the key is already available, we can use RegKeyOpenEx to get the HKEY handle. This handle can be used for RegSetValueEx.
Registry Values – REG_SZ entries using RegSetValueEx:
The following is the sample code for setting a REG_SZ entry. We use the same key entry for this also.
HKEY hKey;
DWORD dwDisp = 0;
LPDWORD lpdwDisp = &dwDisp;
CString l_strExampleKey = “SOFTWARE\Microsoft\Exchange\MSExchangeAdminCommon”;
CString l_strStringSample = “StringSample”, l_strStringSampleVal = “String Value”;;
LONG iSuccess = RegCreateKeyEx( HKEY_CURRENT_USER, l_strExampleKey, 0L,NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,lpdwDisp);
if(iSuccess == ERROR_SUCCESS)
{
RegSetValueEx(hKey, l_strStringSample, 0, REG_SZ, (LPBYTE) l_strStringSampleVal.GetBuffer(l_strStringSampleVal.GetLength()), l_strStringSampleVal.GetLength()+ 1);
}
Registry Key – Important:
These functions are declared in Winreg.h. Windows.h to be included for accessing these functions. The library to be used is Advapi32.lib.