Programming/Windows&C#

[Windows/WinAPI] RegCreateKeyEx,

JMob 2013. 10. 20. 19:50
728x90
반응형

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

 지정된 키가 이미 존재하고 있어, 그 키가 오픈됨 





728x90
반응형