본문 바로가기
프로그래밍/Windows API

레지스터 관련 - RegCreateKeyEx 함수

by 호군 2010. 10. 27.
반응형

RegCreateKeyEx

 레지스트리키를 새로 만들어주는 함수입니다. 만약 생성하려는 키가 존재하는 경우 해당 키를 오픈합니다.

LONG RegCreateKeyEx(
HKEY        hKey

LPCTSTR   lpSubKey

DWORD     Reserved

LPTSTR     lpClass

DWORD     dwOptions

REGSAM    samDesired

LPSECURITY_ATTRIBUTES lpSecurityAttributes

PHKEY      phkResult

LPDWORD
lpdwDisposition
);

 

Parameters

hKey

생성할 키의 루트키. 또는 RegCreateKeyEx 나 RegOpenKeyEx 로 반환된 키.
보통 아래의 루트키중 하나를 넣어줍니다.

HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS

lpSubKey

생성할 서브키(문자열)
키이름에 백슬래쉬( \ )는 사용해선 안됩니다.

Reserved
예약된 인자. 반드시 0 을 주어야함.

lpClass
키의 지정된 클래스명(문자열)  (정확한 용도는 모르겠습니다.)
필수 아님 ( 보통 NULL을 줍니다. )


dwOptions
아래의 옵션값을 사용합니다.

REG_OPTION_BACKUP_RESTORE ( 0x00000004L )
 : 이 옵션을 사용하면 samDesired는 무시됩니다.
권한과 보안에 따라 키를 열고 백업 및 복구 등의 행동을 취하는 방법을 달리하는 것같습니다.
(잘모르겠음)

REG_OPEN_NON_VOLATILE ( 0x00000000L )
: 정보를 파일에 기록합니다. ( 보통 이 옵션을 사용 )

REG_OPTION_VOLATILE ( 0x00000001L )
: 정보를 메모리에 기록합니다. ( 시스템종료시 기록이 지워집니다. )

samDesired
생성된 키에 주어지는 권한.
그냥 모든 권한을 줄때는 KEY_ALL_ACCESS 를 인자로 줍니다.
자세한 내용은
레지스트리 키 보안과 접근 권한을 참고하세요.
lpSecurityAttributes
SECURITY_ATTRIBUTES 구조체의 포인터. (필수 아님 , 보통 NULL을 준다.)
자식프로세스 상속과 관련된 내용같은데 잘 모르겠음.

phkResult
생성된 키의 핸들포인터.
키가 루트키가 아닌경우에는 RegCloseKey를 사용하여 키를 해제해야 합니다.

lpdwDisposition
DWORD의 포인터, 생성된 키의 상태를 알려줍니다.
( 필수아님, 보통 NULL을 줍니다.)

반환되는 결과값은 아래와 같습니다.
REG_CREATED_NEW_KEY ( 0x00000001L )
: 새로 생성된 키
REG_OPENED_EXISTING_KEY ( 0x000000012 )
: 기존에 존재하던 키

Return Values

성공시 ERROR_SUCCESS 를 리턴합니다.
실패시는 0 이 아닌값을 리턴하고 해당 에러코드는 Winerror.h에 정의 되어 있습니다.

Requirements

Client Requires Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Server Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server.
Header

Declared in Winreg.h; include Windows.h.

Library

Link to Advapi32.lib.

DLL Requires Advapi32.dll.
Unicode

Implemented as RegCreateKeyExW (Unicode) and RegCreateKeyExA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.


Example Code
// HKLM/Software/Test/test 키를 생성하는 예제

// 새로 생성할 키의 핸들

HKEY newKey;
// RegCreateKeyEx 수행결과
LONG ret = 0;

ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
                              "Software\\Test\\test",
                              0,
                              NULL,
                              REG_OPTION_NON_VOLATILE,
                              KEY_CREATE_SUB_KEY,
                              NULL,
                              &newKey,
                              NULL);

if(ret == ERROR_SUCCESS )
{
      // 키생성 성공
}
else
{
      // 키생성 실패
}

출처 : http://smok95.tistory.com/
반응형