HKEY的值:
HKEY_LOCAL_MACHINE:与机器相关的属性,所有用户共用的属性。例如开机启动就在这里。
HKEY_CURRENT_USER:与用户相关的属性,可能只有用户特有。例如开机启动就在这里。
REG_OPTION_VOLATILE:这个参数的意思是创建的注册表键值都位于内存中,不会保存到相应的注册表文件中。重启后这些键值当然就没有了。
REG_OPTION_NON_VOLATILE:写入到注册表文件中。
//写入注册表为DWORD类型
//返回ERROR_SUCCESS(0)标识成功
DWORD SetRegValue(HKEY hMainKey, LPCTSTR lpSubKey, LPCTSTR lpKeyName, DWORD dwKeyValue)
{
HKEY hKey;
DWORD dwDispoistion = REG_OPENED_EXISTING_KEY;
DWORD dwRet = ERROR_SUCCESS;
dwRet = ::RegCreateKeyEx(hMainKey, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDispoistion);
if (ERROR_SUCCESS == dwRet)
{
dwRet = ::RegSetValueEx(hKey, lpKeyName, 0, REG_DWORD, (BYTE*)&dwKeyValue, sizeof(DWORD));
}
::RegCloseKey(hKey);
return dwRet;
}
//写入注册表为LPCTSTR类型
DWORD SetRegValue(HKEY hMainKey, LPCTSTR lpSubKey, LPCTSTR lpKeyName, LPCTSTR lpKeyValue)
{
HKEY hKey;
DWORD dwDisposition = REG_OPENED_EXISTING_KEY;
DWORD dwRet = ERROR_SUCCESS;
dwRet = ::RegCreateKeyEx(hMainKey, lpSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, &dwDisposition);
if (ERROR_SUCCESS == dwRet)
{
dwRet = ::RegSetValueEx(hKey, lpKeyName, 0, REG_SZ, (BYTE*)lpKeyValue, _tcslen(lpKeyValue) * sizeof(TCHAR));
}
::RegCloseKey(hKey);
return dwRet;
}
// 读注册表的值
DWORD GetRegValue(HKEY hMainKey, LPCTSTR lpSubKey, LPCTSTR lpKeyName, wstring& wstrKeyValueRet)
{
HKEY hKey;
DWORD dwRet = ERROR_SUCCESS;
dwRet == ::RegOpenKeyEx(hMainKey, lpSubKey, 0, KEY_READ, &hKey);
if (ERROR_SUCCESS == dwRet)
{
DWORD dwType = REG_SZ;
DWORD dwSize = MAX_PATH;
TCHAR szReturnValue[MAX_PATH + 1] = { 0 };
dwRet == ::RegQueryValueEx(hKey, lpKeyName, NULL, &dwType, (LPBYTE)szReturnValue, &dwSize);
if (ERROR_SUCCESS == dwRet)
{
wstrKeyValueRet = szReturnValue;
}
}
::RegCloseKey(hKey);
return dwRet;
}
// 删注册表的值
DWORD DelRegKey(HKEY hMainKey, LPCTSTR lpSubKey, LPCTSTR lpKeyName)
{
HKEY hKEY;
DWORD dwRet = ERROR_SUCCESS;
dwRet = ::RegOpenKeyEx(hMainKey, lpSubKey, 0, KEY_SET_VALUE, &hKEY);
if (ERROR_SUCCESS == dwRet)
{
dwRet = ::RegDeleteKey(hKEY, lpKeyName);
}
::RegCloseKey(hKEY);
return dwRet;
}
32位程序如何访问64位的注册表(HKLM/Software)
在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;
在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;
64位程序如何访问32位的注册表(HKLM/Software/Wow6432Node)
在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;
在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;
32位程序默认访问32位注册表信息,64位程序默认访问64位注册表信息;