注册表修改查找

#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