본문 바로가기

Application Programming Interface/Windows API

기능별로 묶어보는 레지스트리 함수 – 4편. 기본값의 조회/수정

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

기능별로 묶어보는 레지스트리 함수.
4편. 기본값의 조회/수정

- by Tapitolife


키의 기본적인 조작을 해 보았다면 이제 기본 값을 다뤄봅니다.
기본 값이란 레지스트리 편집기 상에 나타나는 키(Key)가 갖고 있는 여러 개의 값 중에
이름이 없이 그냥 (기본 값)이라고만 나와 있는 것 문자열 형식의 값입니다.

뭐 이런 거죠

기본 값을 다루는 함수에는 다음과 같은 것이 있습니다.

— RegQueryValue
지정한 키의 기본 값을 가져옵니다.

LONG WINAPI RegQueryValue(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__out_opt LPTSTR lpValue,
__inout_opt PLONG lpcbValue
);

hKey: 기본 값을 가져올 키의 상위 키를 지정합니다.

lpSubKey: hKey의 서브 키 중, 기본 값을 가져올 키의 이름을 지정합니다.
만일 NULL이거나 빈 문자열("")이라면 hKey 자체의 기본 값을 가져옵니다.

lpValue: 기본 값을 담아 올 버퍼입니다. NULL로 지정한다면 lpcbValue으로
지정된 기본 값의 크기를 내보냅니다.

lpcbValue: lpValue 버퍼의 크기를 일러주거나 가져옵니다. 단위는 바이트입니다.
▶ 반환: 성공하면 ERROR_SUCCESS를 반환합니다.
만일 lpValue 버퍼의 크기가 가져올 값의 크기보다 작다면 ERROR_MORE_DATA를 반환합니다.
그 외의 값에 대해서는 모두 winerror.h에 선언되어 있습니다.

— RegSetValue
지정한 키의 기본 값을 설정합니다.

LONG WINAPI RegSetValue(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__in DWORD dwType,
__in LPCTSTR lpData,
__in DWORD cbData
);

hKey: 기본 값을 설정할 키의 상위 키입니다.

○ lpSubKey: hKey의 서브키 중에서 기본 값을 설정할 키의 이름입니다.
NULL이나 빈 문자열("")로 지정하면 hKey 자체의 기본 값을 설정합니다.

○ dwType: 설정할 값의 타입입니다. 반드시 REG_SZ만을 써야 합니다.

○ lpData: 설정할 문자열 데이터입니다.

○ cbData: 문자열의 길이를 명시……하지는 않고 그냥 함수 내부에서 lpData 문자열의 길이를
계산한답니다. 즉, 이 값은 무시됩니다.

▶ 반환: 성공하면 ERROR_SUCCESS를 반환합니다.
만일 lpValue 버퍼의 크기가 가져올 값의 크기보다 작다면 ERROR_MORE_DATA를 반환합니다.
그 외의 값에 대해서는 모두 winerror.h에 선언되어 있습니다.

이 2가지 함수를 이용해 만들어 본 예제입니다.

regtest3.c

#include <windows.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    HKEY hKey;
    TCHAR szValue1[128] = TEXT(
"Registry Default Value Test");
    TCHAR szValue2[128] = TEXT(
"tapitolife.tistory.com");
    LONG result = 0;

    printf(
"HKCU\\Tapito 키를 생성합니다.\n");
    result = RegCreateKey(HKEY_CURRENT_USER, TEXT(
"Tapito"), &hKey);

    if(result == ERROR_SUCCESS) printf("키 생성 성공.\n");
    else printf("키 생성 실패.\n");

    result = RegSetValue(hKey, NULL, REG_SZ, szValue1, 0);

    if(result == ERROR_SUCCESS) printf("1번째 테스트 성공.\n");
    else printf("1번째 테스트 실패.\n");

    RegCloseKey(hKey);
    printf(
"계속 진행 하려면 아무 키나 누르세요.\n");
    _getch();

    result = RegSetValue(HKEY_CURRENT_USER, TEXT(
"Tapito"), REG_SZ, szValue2, 0);
    if(result == ERROR_SUCCESS) printf("2번째 테스트 성공.\n");
    else printf("2번째 테스트 실패.\n");

    printf("계속 진행 하려면 아무 키나 누르세요.\n");
    _getch();

    result = RegDeleteKey(HKEY_CURRENT_USER, TEXT("Tapito"));
    if(result == ERROR_SUCCESS) printf("키 삭제 성공.\n");
    else printf("키 삭제 실패.\n");
    /////////////////////////////////////////////////////////////////////////////////////////////
    printf("끝.\n");
    getch();

    return 0;
}

 

실행 결과.

키가 생성 되었고 기본값이 잘 설정 되었습니다.

두 번째 테스트 역시 잘 되었습니다.

삭제까지 깔끔하게 되었네요.