#include <Windows.h>
#include <Winreg.h>
#define REG_TEST_HLKM_CONTROL L"SYSTEM\\CurrentControlSet\\Control"
#define REG_TEST_ROOT L"TestRoot"
#define REG_TEST_SUB1 L"Sub_1"
#define REG_TEST_SUB2 L"Sub_2"
//创建项以及子项
BOOL CreateAndSetRegTest()
{
int err = 0;
BOOL bRet = FALSE;
HKEY hKey = NULL;
WCHAR path[MAX_PATH] = {0};
wsprintf(path,L"%ws\\%ws",REG_TEST_HLKM_CONTROL,REG_TEST_ROOT);
//创建项,如果存在就打开
if( ERROR_SUCCESS != (err =RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL)) )
{
goto RET;
}
//设置字符串值,如果存在就更新值
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"TestRoot_String1",0,REG_SZ,(BYTE*)L"TestRoot_String1",wcslen(L"TestRoot_String1")*sizeof(WCHAR))) )
{
goto RET;
}
//设置DWORD值,如果存在就更新值
DWORD dw1 = 1234;
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"TestRoot_DWord1",0,REG_DWORD,(BYTE*)&dw1,sizeof(DWORD))) )
{
goto RET;
}
RegCloseKey(hKey);
hKey = NULL;
wcscat(path,L"\\");
wcscat(path,REG_TEST_SUB1);
//创建子项,如果存在就打开
if( ERROR_SUCCESS != (err =RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL)) )
{
goto RET;
}
//设置字符串值,如果存在就更新值
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"Sub1_String1",0,REG_SZ,(BYTE*)L"Sub1_String1",wcslen(L"Sub1_String1")*sizeof(WCHAR))) )
{
goto RET;
}
//设置DWORD值,如果存在就更新值
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"Sub1_DWord1",0,REG_DWORD,(BYTE*)&dw1,sizeof(DWORD))) )
{
goto RET;
}
RegCloseKey(hKey);
hKey = NULL;
wsprintf(path,L"%ws\\%ws\\%ws",REG_TEST_HLKM_CONTROL,REG_TEST_ROOT,REG_TEST_SUB2);
//创建子项,如果存在就打开
if( ERROR_SUCCESS != (err =RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL)) )
{
goto RET;
}
//设置字符串值,如果存在就更新值
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"Sub2_String1",0,REG_SZ,(BYTE*)L"Sub2_String1",wcslen(L"Sub2_String1")*sizeof(WCHAR))) )
{
goto RET;
}
//设置DWORD值,如果存在就更新值
if( ERROR_SUCCESS != (err = RegSetValueEx(hKey,L"Sub2_DWord1",0,REG_DWORD,(BYTE*)&dw1,sizeof(DWORD))) )
{
goto RET;
}
bRet = TRUE;
RET:
if(hKey)
{
RegCloseKey(hKey);
}
return bRet;
}
//枚举子项
BOOL EmumRegTest()
{
int err = 0;
BOOL bRet = FALSE;
HKEY hKey = NULL;
WCHAR path[MAX_PATH] = {0};
wsprintf(path,L"%ws\\%ws",REG_TEST_HLKM_CONTROL,REG_TEST_ROOT);
//创建项,如果存在就打开
if( ERROR_SUCCESS != (err =RegCreateKeyEx(HKEY_LOCAL_MACHINE,path,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,NULL)) )
{
goto RET;
}
WCHAR value[MAX_PATH] = {'\0'};
int index = 0;
while(1)
{
DWORD dwSize = MAX_PATH*sizeof(WCHAR);
//枚举子项
if( ERROR_SUCCESS != (err =RegEnumKeyEx(hKey,index++,value,&dwSize,NULL,NULL,NULL,NULL)) )
{
if(ERROR_NO_MORE_ITEMS == err)
{
break;
}
goto RET;
}
DWORD dwRet = 0;
DWORD dwRetSize = 4;
//读取分支的dword值
if(0 == wcscmp(value,REG_TEST_SUB1))
{
err = RegGetValue(hKey,value,L"Sub1_DWord1",RRF_RT_DWORD,NULL,&dwRet,&dwRetSize);
}
WCHAR retBuf[MAX_PATH] = {0};
dwRetSize = MAX_PATH*sizeof(WCHAR);
//读取分支的字符串的值
if(0 == wcscmp(value,REG_TEST_SUB2))
{
err = RegGetValue(hKey,value,L"Sub2_String1",RRF_RT_REG_SZ,NULL,&retBuf,&dwRetSize);
}
}
bRet = TRUE;
RET:
if(hKey)
{
RegCloseKey(hKey);
}
return bRet;
}
//删除子项
BOOL DeleteRegTest()
{
int err = 0;
BOOL bRet = FALSE;
HKEY hKey = NULL;
WCHAR path[MAX_PATH] = {0};
wsprintf(path,L"%ws\\%ws",REG_TEST_HLKM_CONTROL,REG_TEST_ROOT);
wcscat(path,L"\\");
wcscat(path,REG_TEST_SUB1);
//删除子项,也可以直接删除父项
if( ERROR_SUCCESS != (err =RegDeleteKeyEx(HKEY_LOCAL_MACHINE,path,KEY_ALL_ACCESS,0)) )
{
return FALSE;
}
return TRUE;
}
注册表修改查找
猜你喜欢
转载自blog.csdn.net/qq_36576377/article/details/79811105
周排行