관리 메뉴

(코딩캣) = "코딩"하는 고양이;

기능별로 묶어보는 레지스트리 함수 – 5편. 값의 조회/추가/수정/삭제 본문

Application Programming Interface/Windows API

기능별로 묶어보는 레지스트리 함수 – 5편. 값의 조회/추가/수정/삭제

컴파일러님, 이 코드는 고양이발로 작성되었습니다. 코딩집사 2011.02.06 14:26

기능별로 묶어보는 레지스트리 함수.
5편. 값의 조회/추가/수정/삭제

- by Tapitolife


기본 값을 다뤄 보았다면 이제 이름을 갖는 다양한 형식의 값을 다뤄봅니다.

— RegEnumValue
지정한 키가 가지고 있는 모든 값의 이름들을 가져옵니다.

LONG WINAPI RegEnumValue(
__in HKEY hKey,
__in DWORD dwIndex,
__out LPTSTR lpValueName,
__inout LPDWORD lpcchValueName,
__reserved LPDWORD lpReserved,
__out_opt LPDWORD lpType,
__out_opt LPBYTE lpData,
__inout_opt LPDWORD lpcbData
);

hKey: 값들의 이름을 조회할 키 자체에 대한 핸들입니다.

dwIndex: 0부터 1씩 증가하는 인덱스입니다.

lpValueName: 값의 이름을 담아 올 문자열 버퍼입니다.

lpcchValueName: 버퍼 lpValueName의 크기가 입력됩니다. (단위: 글자)

lpReserved: 항상 NULL입니다.

lpType: 형식을 담아 올 버퍼입니다. 값의 형식은 필요 없다면 NULL입니다.

lpData: 값을 담아 올 버퍼입니다. 값이 필요 없다면 NULL입니다.

lpcbData: 값의 크기가 내보내기 됩니다. 문자열 형식이라면 단위는 글자가 되고, 그 외에는 바이트가 됩니다.

— RegGetValue
지정된 이름을 갖는 값을 가져옵니다.

LONG WINAPI RegGetValue(
__in HKEY hKey,
__in_opt LPCTSTR lpSubKey,
__in_opt LPCTSTR lpValue,
__in_opt DWORD dwFlags,
__out_opt LPDWORD pdwType,
__out_opt PVOID pvData,
__inout_opt LPDWORD pcbData
);

hKey: 값을 가져올 키 자체, 또는 그 키의 상위 키에 대한 핸들입니다.

lpSubKey: hKey에 상위 키를 지정했다면, 여기에는 처리할 서브키의 이름을 명시합니다.

lpValue: 값의 이름입니다.

dwFlags: 가져오기 옵션입니다. 주로 가져올 값의 형식을 제한하는 조건을 부여하는데,
이에 부합되지 않을 경우 에러를 반환합니다. 옵션을 아래 표의 상수 중에 선택합니다.

이름

설명

RRF_RT_ANY

0x0000FFFF

아무 제한이 없습니다.

RRF_RT_DWORD

0x00000018

가져올 값을 32비트 정수로 제한합니다.

RRF_RT_QWORD

0x00000048

가져올 값을 64비트 정수로 제한합니다.

RRF_RT_REG_BINARY

0x00000008

가져올 값을 REG_BINARY로 제한합니다.

RRF_RT_REG_DWORD

0x00000010

가져올 값을 REG_DWORD로 제한합니다.

RRF_RT_REG_EXPAND_SZ

0x00000004

가져올 값을 REG_EXPAND_SZ로 제한합니다.

RRF_RT_REG_MULTI_SZ

0x00000020

가져올 값을 REG_MULTI_SZ로 제한합니다.

RRF_RT_REG_NONE

0x00000001

가져올 값을 REG_NONE으로 제한합니다.

RRF_RT_REG_QWORD

0x00000040

가져올 값을 REG_QWORD로 제한합니다.

RRF_RT_REG_SZ

0x00000002

가져올 값을 REG_SZ로 제한합니다.

이 상수와 더불어 다음 상수를 논리 합하여 지정할 수 있습니다.

이름

설명

RRF_NOEXPAND

0x10000000

형식이 REG_EXPAND_SZ일 때 자동 확장하지 않습니다.

RRF_ZEROONFAILURE

0x20000000

가져오기에 실패했고, pvData 버퍼가 NULL이 아닐 때,
pvData 버퍼의 내용을 0으로 모두 초기화합니다.

 

— RegSetValueEx
지정된 이름을 갖는 값을 설정합니다. 없으면 새로 만듭니다.

LONG WINAPI RegSetValueEx(
__in HKEY hKey,
__in_opt LPCTSTR lpValueName,
__reserved DWORD Reserved,
__in DWORD dwType,
__in_opt const BYTE *lpData,
__in DWORD cbData
);

hKey: 다룰 키에 대한 핸들입니다.

lpValueName: 다룰 값의 이름입니다.

Reserved: 그냥 0을 입력합니다.

dwType: 값의 형식을 지정합니다.

lpData: 레지스트리에 저장할 값입니다.

cbData: 바이트 단위의 값의 크기(문자열인 경우 NULL까지 포함해서)입니다.

— RegDeleteValue

지정된 이름을 갖는 값을 제거합니다.

LONG WINAPI RegDeleteValue(
__in HKEY hKey,
__in_opt LPCTSTR lpValueName
);

hKey: 다룰 키에 대한 핸들입니다.

lpValueName: 제거할 값의 이름입니다.

3 Comments
  • 프로필사진 유현욱 2013.07.16 23:20 질문 하나 드릴께요.
    RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Internet Explorer\\Main"), &hKey);
    RegSetValueEx(HKEY_LOCAL_MACHINE, TEXT("Start Page"), 0, REG_SZ, TEXT("http://www.naver.com"), 0);
    이렇게 코딩을 한후 실행을 하면 실행은 됩니다. 반환되는값도 성공했을때 나오는 값과 같아요.
    근데 제가 지정한 키에 이름의 값이 변하지 않고 HKEY_LOCAL_MACHINE 에 아무 값도 없이 제가 지정한 이름이 생성이 됩니다. 어떻게 해야 될까요? 답변 부탁드립니다^^
  • 프로필사진 컴파일러님, 이 코드는 고양이발로 작성되었습니다. 코딩집사 2013.07.19 21:31 신고 코드의 일부만 봐서는 모르겠습니다만
    UAC 기능 때문에 관리자 모드로 실행해야 결과가 나타날 수 있는 경우도 있고요
    RegSetValueEx 호출 부분이 좀 이상합니다.
    문맥상 첫 번째 인자로 hKey가 들어가야 할 것 같은데
    HKLM을 넣으면
    실행 결과가 HKLM\SOFTWARE\Microsoft...가 아니라
    HKLM\Start Page의 값에 텍스트가 설정됩니다.
  • 프로필사진 유현욱 2013.07.21 20:11 답변감사합니다^^ 설명해주시니 이해가 가네요.
댓글쓰기 폼