## 레지스트리 추가 ##

레지스트리 추가 부분에서는 위에 루트에 abc라는 이름과 "c:\\winnt\\system32\\notepad.exe"의 데이터를 갖는것을 추가함.

LONG lResult;
char buffer[100];
HKEY hKey;
DWORD dwDesc;
char *path = "c:\\winnt\\system32\\notepad.exe";      // 노트 패드 경로

// 레지스트리 열고
RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);

// Set Registry Key & Value
lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0,
             buffer, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDesc);
if(lResult == ERROR_SUCCESS) 
{
    RegSetValueEx(hKey, "abc", 0, REG_SZ, (BYTE*)path, strlen(path));
}

//레지스트리 닫고
RegCloseKey(hKey);



## 레지스트리 삭제 ##

LONG lResult;
HKEY hKey;
DWORD dwBytes=100;
CString str = "abc";

// open Regstry Key
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
if(lResult != ERROR_SUCCESS)
{
    AfxMessageBox("Register Open Error");


lResult = RegDeleteValue(hKey, str);      // 삭제

if (lResult == ERROR_SUCCESS) 
    AfxMessageBox("레지스터 삭제 성공");
else 
    AfxMessageBox("실패당...ㅠㅠ");

RegCloseKey(hKey);



## 레지스트리 읽기 ##

LONG lResult;
HKEY hKey;
DWORD dwType;
DWORD dwBytes=100;
char buffer[100];

// open Regstry Key
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey);
if(lResult != ERROR_SUCCESS)
{
    AfxMessageBox("Register Open Error");


// Read Regstry Key
lResult=RegQueryValueEx(hKey, "abc", 0, &dwType, (LPBYTE)buffer, &dwBytes); 

if(lResult == ERROR_SUCCESS)
    AfxMessageBox(buffer);
else        
    AfxMessageBox("Register Read Error");
      
RegCloseKey(hKey);



## 서브 키까지 삭제 #

void SimpleApp::DeleteRegKey()
{
    HKEY m_hKey = NULL; 
    char svSubKeyBuf[MAX_PATH+1];
    long m_RetValue = ::RegOpenKeyEx
        (HKEY_CURRENT_USER,"Software\\Test",0,KEY_ALL_ACCESS,&m_hKey);
    if(m_RetValue == ERROR_SUCCESS) // 오픈 성공하면...
    {
        RegDeleteKeyRecurse(HKEY_CURRENT_USER, _T("Software\\Test"), svSubKeyBuf);
    }

    return;
}

int SimpleApp::RegDeleteKeyRecurse(HKEY hKey, LPCTSTR lpSubKey, char *svKeyBuf)
{
    int nCount=0;
    char svSubKeyBuf[MAX_PATH+1];
    HKEY hSubKey;

    if(RegOpenKeyEx(hKey,lpSubKey,0,KEY_ALL_ACCESS,&hSubKey)!=ERROR_SUCCESS) {
        return -1;
    }

    while(RegEnumKey(hSubKey,nCount,svKeyBuf,MAX_PATH)!=ERROR_NO_MORE_ITEMS) {
        if(RegDeleteKeyRecurse(hSubKey,svKeyBuf,svSubKeyBuf)==-1) {
            RegCloseKey(hSubKey);
            return 1;
        }
        nCount++;
    }

    RegCloseKey(hSubKey);

    RegDeleteKey(hKey,lpSubKey);

    return 0;
}

정확한 출처를 잘모르겠습니다.
뎃글 또는 이메일로 메세지 남겨주시면 출처 표시하겠습니다.
Posted by 띠깜
,