Windowsapi 레지스트리 작업 경험 및 요약

등록표에서 자주 사용하는 함수 읽기
RegOpenKeyEx 키를 여는 데 사용
키 값을 설정하는 데 사용되는 RegSetValueEx
RegQueryValueEx 키를 읽는 데 사용되는 값
RegCloseKey는 RegOpen에서 열린 키를 닫는 데 사용됩니다.
RegQuery ValueEx는 보통 두 번 연속해서 키 값을 읽고, 첫 번째는 키 크기만 읽고, 메모리를 분배한 다음, 다시 한 번 RegQuery ValueEx로 키 값을 버퍼로 읽습니다.
다음은 윈도우즈의 path 키 값을 읽는 예입니다.

 HKEY hk;
 
  int result = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
               _T("SYSTEM\\ControlSet001\\Control\\Session Manager\\Environment"),
               NULL,
               KEY_READ, &hk );
 
  if(result != ERROR_SUCCESS)
  {
    if(result == ERROR_FILE_NOT_FOUND)
    {
 
      MessageBox(g.hwnd,_T("no such key in RegOpenKeyEx"),_T("title"),MB_ICONWARNING);
    }
 
    else
   
    return;
  }
 
  DWORD lsize;
 
  result = RegQueryValueEx(hk, _T("Path"),NULL,NULL,
              NULL, &lsize);
 
 
  if(result != ERROR_SUCCESS)
  {
    if(result == ERROR_FILE_NOT_FOUND)
    {
 
      MessageBox(g.hwnd,_T("no such key in RegQueryValue"),_T("title"),MB_ICONWARNING);
    }
    else if(result == ERROR_MORE_DATA)
    {
      MessageBox(g.hwnd,_T("need more buffer"),_T("title"),MB_ICONWARNING);
    }
    else
   
    return;
  }
  TCHAR *value = (TCHAR * )malloc(lsize * sizeof(TCHAR));
  result = RegQueryValueEx(hk, _T("Path"),NULL,NULL,
              (LPBYTE)value, &lsize);
  if(result != ERROR_SUCCESS)
  {
    if(result == ERROR_FILE_NOT_FOUND)
    {
 
      MessageBox(g.hwnd,_T("no such key in RegQueryValue"),_T("title"),MB_ICONWARNING);
    }
    else if(result == ERROR_MORE_DATA)
    {
      MessageBox(g.hwnd,_T("need more buffer"),_T("title"),MB_ICONWARNING);
    }
    else
    
    return;
  }
  SetWindowText(g.hwndEdit,value);
  free(value);
  RegCloseKey(hk);
초보자 FAQ
RegSetValueEx 실행 중 실패했습니다. 반환 코드는 5입니다.
해결 방법: 이 경우 등록표에 대한 접근 권한이 부족하여 접근을 거부한다는 뜻입니다. 따라서 권한이 부족하지 않은지 주의하십시오.
KEY_ALL_ACCESS는 문제없습니다. 이렇게 읽고 쓰는 등의 권한은 모두 가능합니다.

좋은 웹페이지 즐겨찾기