LONG WINAPI RegCreateKeyEx( _In_ HKEY hKey, -----① _In_ LPCTSTR lpSubKey, -----② _Reserved_ DWORD Reserved, -----③ _In_opt_ LPTSTR lpClass, -----④ _In_ DWORD dwOptions, -----⑤ _In_ REGSAM samDesired, -----⑥ _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, -----⑦ _Out_ PHKEY phkResult, -----⑧ _Out_opt_ LPDWORD lpdwDisposition -----⑨ );
함수 성공시 특이하게도 ERROR_SUCCESS(0)을 반환한다. 레지스트리 키를 만들며 이미 존재시에는 키를 오픈한다.
① hKey :
오픈할 키의 핸들을 지정한다. 이 핸들은 KEY_CREATE_SUB_KEY 액세스를 가지고 있어야한다.
HKEY_CLASSES_ROOT |
파일 확장자에 대한 속성과 COM오브젝트에 대한 설정 정보 |
HKEY_CURRENT_CONFIG | 하드웨어 설정 정보 |
HKEY_CURRENT_USER |
현재 로그인한 사용자의 설정 정보를 가진다. 환경변수, 프로그램 그룹 구성, 시스템 색상등 각 프로그램의 설정 상태도 저장 |
HKEY_LOCAL_MACHINE |
컴퓨터의 물리적 구성 정보가 저장된다. 버스타입, 시스템 메모리, 설치된 하드웨어와 소프트웨어의 정보가 포함된다. |
HKEY_USERS |
새로운 사용자를 위한 디폴트 설정 정보와 현재 사용자 정보가 보관된다. |
② lpSubkey :
만들거나 오픈하는 서브 키의 이름을 나타내는 문자열의 주소를 지정한다. NULL(0)값으론 줄 수 없다. 일반적으론 디렉토리 명처럼 사용한다.
③ Reserves :
예약된 파라미터로 무조건 0을 지정해주어야한다.
④ lpClass :
이 키의 클래스 (오브젝트 종류)의 이름을 나타내는 문자열 주소를 지정한다. 키가 이미 존재할경우 무시한다. 보통 무시될수 있기 때문에 NULL 사용.
⑤ dwOption :
키에 대한 특별한 옵션을 지정한다.
값 |
의미 |
REG_OPTION_BACKUP_RESTORE (0x00000004L) |
파라미터의 액세스 지정을 무시하고, 키의 백업 또는 복원에 필요한ㅇ 엑세스 요구와 함께 키를 오픈한다. 호출츧의 스렛드가 SE_BACKUP_NAME 특권을 가지고 이쓴 경우, 이 키는,ACCESS_SYSTEM_SECURITY 액세스와 KEY_READ 액세스로 오픈됩니다.호출측의 스렛드가 SE_RESTORE_NAME 특권을 가지고 있는 경우, 이 키는,ACCESS_SYSTEM_SECURITY 액세스와 KEY_WRITE 액세스로 오픈됩니다.양쪽 모두의 특권을 가지고 있는 경우, 양쪽 모두의 특권이 짜 합쳐집니다. |
REG_OPTION_CREATE_LINK (0x00000002L) |
이 키는 심볼릭 링크입니다. 대상 경로는 키의 L"SymbolicLinkValue"값에 할당됩니다. 대상 경로는 절대 레지스트리 경로 여야합니다. Note Registry symbolic links should only be used for for application compatibility when absolutely necessary. |
REG_OPTION_NON_VOLATILE (0x00000000L) |
불 휘발성 키값이다. 정보는 디스크 파일에 저장되어 시스템을 재가동 하여도 정보는 없어지지 않는다. |
REG_OPTION_VOLATILE (0x00000001L) |
휘발성 키값이다. 정보는 메모리에 보관하고 디스크에는 저장되지 않기 때문에 시스템 재시작시 없어진다. 지정된 이름의 키가 벌써 존재하는 경우 무시된다. |
⑥ samDesired :
오픈하는 키의 핸들의 시큐러티 엑세스를 나타내는 엑세스 마스크를 지정합니다.
값 | 의미 |
KEY_QUERY_VALUE |
서브 키 데이터의 문의를 허가한다. |
KEY_SET_VALUE |
서브 키 데이터의 설정을 허가한다. |
KEY_CREATE_SUB_KEY |
서브 키의 작성을 허가한다. |
KEY_ENUMERATE_SUB_KEYS |
서브 키의 열거를 허가한다. |
KEY_NOTIFY |
변경의 통지를 허가한다. |
KEY_CREATE_LINK |
기호 연결의 작성을 허가한다. |
KEY_WOW64_64KEY |
64 비트 또는 32 비트 어플리케이션이, 64 비트 키를 오픈할 수 있도록 해준다. |
KEY_WOW64_32KEY |
64 비트 또는 32 비트 어플리케이션이, 32 비트 키를 오픈할 수 있도록 해준다. |
KEY_WRITE |
STANDARD_RIGHTS_WRITE, KEY_SET_VALUE, KEY_CREATE_SUB_KEY 액세스의 편성입니다. |
KEY_READ, KEY_EXECUTE |
STANDARD_RIGHTS_READ, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY 액세스의 편성입니다. |
KEY_ALL_ACCESS | STANDARD_RIGHTS_REQUIRED, KEY_QUERY_VALUE, KEY_ENUMERATE_SUB_KEYS, KEY_NOTIFY, KEY_CREATE_SUB_KEY, KEY_CREATE_LINK, KEY_SET_VALUE 액세스의 편성입니다. |
⑦ lpSecurityAttributes :
취득한 핸들의 cjild proxess에 계승을 허가 할지를 결정하는 SECURITE_ATTRIBUTES 구조체의 포인터를 지정한다. NULL(0)을 지정할 경우 핸들은 계승되지 않는다.
⑧ phkResult :
작성 또는 오픈된 키의 핸들을 격납하기 위한 변수의 주소를 지정한다. 여기에서 받은 핸들을 반납할 떄에 RegCloseKey함수를 이용하여 반납한다.
⑨ pswDisposition :
키가 새롭게 작성 되었는지에 대한 값을 넣어준다. 값을 저장할 변수의 주소를 인자로 넘겨준다. 리턴 값은 다음과 같다. 만약에 인자로 NULL을 넣어줄 경우 값을 저장하지 않는다.
값 |
의미 |
KEY_QUERY_VALUE |
지정한 키가 존재하지 않아 키가 새롭게 생성됨 |
REG_OPENED_EXISTING_KEY |
지정된 키가 이미 존재하고 있어, 그 키가 오픈됨 |