'윈도우즈 API 정복'에 해당되는 글 1건

  1. 2009.05.29 레지스트리(Registry)
2009. 5. 29. 15:43

레지스트리(Registry)


프로그램은 실행중에 사용자가 입력한 옵션 설정이나 프로그램 스스로 만들어낸 정보들을 다음 실행을 위해서 저장을 해두어야 할 필요가 있다. 레지스트리(Registry)는 프로그램 실행중에 일어나는 상황이라든지 프로그램의 설정 정보를 저장하기 위해 사용된다. 저장의 대상은 사용자의 신상, 프로그램의 위치, 크기, 옵션, 설정 등의 프로그램 동작에 필요한 모든 정보가 될 수 있다.
이러한 레지스트리 설정을 통해 프로그램이 다음 실행시에도 이전의 상태 그대로를 유지 할 수 있는 것을 볼 수 있다.

등록된 레지스트리를 보거나 수정을 하려면 시작->실행에서 regedit를 입력후 엔터키를 치면 확인할 수 있다.

레지스트리를 다루는 데 주로 사용되는 함수들은 아래와 같다.

레지스트리 키를 생성하는 함수이다. 이미 키가 생성되어 있는 상태라면 해당 키를 열기만 한다. 이 함수의 인수는 9개로 많기는 하지만, 대부분의 인수는 디폴트로 적용된다.
LONG RegCreateKeyEx(
                                    HKEY hKey,
                                    LPCTSTR LpSubKey,
                                    DWORD Reserved,
                                    LPTSTR lpClass,
                                    DWORD dwOptions,
                                    REGSAM samDesired,
                                    LPSECURITU_ATTRIBUTES  lpSecurityAttributes,
                                    PHKEY phkResult,
                                    LPDWORD lpdwDisposition
                                   );
hKey - 새로 만들어지는 키의 부모키를 지정한다.
            응용 프로그램들이 주로 사용하는 키는  HKEY_CURRENT_USER 키이고, 이 키 아래 Software 서브
            키에 자신의 서브키를 생성하여 사용한다.
            운영체제에 의해 사용할 수 있는 키는 아래와 같다.
              HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, ....

lpSubKey - 만들고자(혹은 열고자) 하는 서브키를 지정하는 널을 포함하는 문자열로 반드시 지정해 주어야
                   한다.

Reserved - 예약..

lpClass - 생성되는 키의 클래스를 지정하는 문자열이다.
                이미 존재하는 키를 오픈할 때 이 인수는 무시되고, 클래스를 지정하지 않을 때에는 NULL로 설정
                한다.

dwOptions - 생성하는 키의 옵션을 지정한다.(키를 생성할 때만 적용된다.)
                     REG_OPTION_NON_VOLATILE
                     REG_OPTION_VOLATILE
                     REG_OPTION_BACKUP_RESTORE

samDesired - 새로 만들어지는 키의 보안 속성을 설정한다.

lpSecurityAttributes - 키값이 차일드 프로세스로도 상속 될 것인가를 지정하는 SECURITY_ATTRIBUTE
                                   구조체의 포인터이다. NULL이면 상속되지 않는다.

phkResult - 만들어지거나 열려진 키값이 대입되는 변수의 포인터이다.
                   이 인수가 지정한 변수에 생성된(열린) 키값을 리턴한다. 리턴값은 HKEY형의 현수이다.

lpdwDisposition - 키가 새로 생성되었는지 기존의 키가 오픈 된것인지를 리턴받기 위한 출력용 변수이다.
                             REG_CREATED_NEW_KEY : 생성된 키,
                             REG_OPENED_EXISTING_KEY : 기존의 키가 오픈된 것
예)
RegCreateKeyEx ( HKEY_CURRENT_USER, "Software\\Wizntec\\RegiTest\\Position", 0, NULL,
                           REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &dwDisp );

RegCreateKeyEx()에 의해 열려진 레지스트리 키는 아래의 RegSetValueEx()함수를 통해서 조작할 수 있다.
LONG RegSetValueEx( HKEY hKey,
                                      LPCTSTR lpValueName,
                                      DWORD Reserved,
                                      DWORD dwType,
                                      CONST BYTE *lpData,
                                      DWORD cbData
                                     );
hKey - 값을 저장하고자 하는 키 핸들
lpValueName - 값의 이름을 지정하는 문자열, 해당 키에 값이 없으면 새로 생성해서 데이터를 저장한다.
dwType - 값의 형(type), 대부분 정수형(REG_DWORD)과 문자열(REG_SZ)를 사용한다.
lpData - 저장하고자 하는 데이터의 포인터이다.
cbData - 데이터의 크기 값


RegCreateKeyEx()에 의해 오픈된 레지스트리로부터 RegQueryValueEx()를 사용해서 값을 읽어올 수 있다.
LONG RegQueryValueEx( HKEY hKey,
                                           LPTSTR lpValueName,
                                           LPDWORD lpReserved,
                                           LPDWORD lpType,
                                           LPBYTE lpData,
                                           LPDWORD lpcbData
                                         );
첫 번째 ~ 세 번째 인수는 이전과 동일.
lpType - 읽은 값의 타입을 대입받을 변수의 포인터
lpData - 읽혀진 값을 대입받을 변수의 번지
lpcbData - 이 변수의 크기값을 가지는 변수의 번지


RegOpenKeyEx() 함수는 레지스트리를 열기만 하는 함수이다. 보통 RegCreateKeyEx()를 주로 이용하여 잘 사용되지 않는 함수이다.
LONG RegOpenKeyEx( HKEY hKey,
                                      LPCTSTR lpSubKey,
                                      DWORD ulOptions,
                                      PHKEY phkResult
                                    );


마지막으로 열려진 레지스트리 키를 닫는 함수이다.
LONG RegCloseKey( HKEY hKey );

레지스트리의 예제는 윈도우즈 API 정복을 참조했으며 아래 파일을 통해 테스트 하면 된다.


'Programmings > Windows Programming' 카테고리의 다른 글

WinIO  (0) 2009.06.23
IME 입력모드 설정  (5) 2009.05.29
다른 윈도우에서의 GetFocus() 사용하기  (0) 2009.05.28
서브클래싱  (0) 2009.05.26
GetWindowThreadProcessId()  (0) 2009.05.18