ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 스크랩 ] 레지스트리 : RegCreateKeyEx
    Programming 2009. 3. 17. 01:44

    출처 : http://itka.kr/zbxe/debugprog/2687

    #include 
    
     
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    
    HINSTANCE g_hInst;
    
    HWND hWndMain;
    
    LPCTSTR lpszClass=TEXT("Registry");
    
     
    
    int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
    
                 ,LPSTR lpszCmdParam,int nCmdShow)
    
    {
    
               HWND hWnd;
    
               MSG Message;
    
               WNDCLASS WndClass;
    
               g_hInst=hInstance;
    
     
    
               WndClass.cbClsExtra=0;
    
               WndClass.cbWndExtra=0;
    
               WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    
               WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    
               WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    
               WndClass.hInstance=hInstance;
    
               WndClass.lpfnWndProc=WndProc;
    
               WndClass.lpszClassName=lpszClass;
    
               WndClass.lpszMenuName=NULL;
    
               WndClass.style=CS_HREDRAW | CS_VREDRAW;
    
               RegisterClass(&WndClass);
    
     
    
               hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
    
                          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
    
                         NULL,(HMENU)NULL,hInstance,NULL);
    
               ShowWindow(hWnd,nCmdShow);
    
     
    
               while (GetMessage(&Message,NULL,0,0)) {
    
                         TranslateMessage(&Message);
    
                         DispatchMessage(&Message);
    
               }
    
               return (int)Message.wParam;
    
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
    
    {
    
               RECT rt;
    
               HKEY key;
    
               DWORD dwDisp;
    
               DWORD Size;
    
               switch (iMessage){
    
                         case WM_CREATE:
    
                                    RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\ITKA\\Test\\Position",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&key,&dwDisp);
    
                                    Size=sizeof(LONG);
    
                                    if(RegQueryValueEx(key,"Left",0,NULL,(LPBYTE)&rt.left,&Size)!=ERROR_SUCCESS)rt.left=0;
    
                                    Size=sizeof(LONG);
    
                                    if(RegQueryValueEx(key,"Top",0,NULL,(LPBYTE)&rt.left,&Size)!=ERROR_SUCCESS)rt.top=0;
    
                                    Size=sizeof(LONG);
    
                                    if(RegQueryValueEx(key,"Right",0,NULL,(LPBYTE)&rt.left,&Size)!=ERROR_SUCCESS)rt.right=100;
    
                                    Size=sizeof(LONG);
    
                                    if(RegQueryValueEx(key,"Bottom",0,NULL,(LPBYTE)&rt.left,&Size)!=ERROR_SUCCESS)rt.bottom=100;
    
                                    Size=sizeof(LONG);
    
                                    RegCloseKey(key);
    
                                    MoveWindow(hWnd, rt.left, rt.top, rt.right-rt.left,rt.bottom-rt.top, TRUE);
    
                                    return 0;
    
                         case WM_DESTROY:
    
                                    RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\ITKA\\Test\\Position",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&key,&dwDisp);
    
                                    GetWindowsRect(hWnd,&rt);
    
                                    RegSetValueEx(key,"Left",0,REG_DWORD,(LPBYTE)&rt.left,sizeof(LONG));
    
                                    RegSetValueEx(key,"Top",0,REG_DWORD,(LPBYTE)&rt.top,sizeof(LONG));
    
                                    RegSetValueEx(key,"Right",0,REG_DWORD,(LPBYTE)&rt.right,sizeof(LONG));
    
                                    RegSetValueEx(key,"Bottom",0,REG_DWORD,(LPBYTE)&rt.bottom,sizeof(LONG));
    
                                    RegCloseKey(key);
    
                                    PostQuitMessage(0);
    
                                    return 0;
    
               }
    
               return(DefWindowProc(hWnd,iMessage,wParam,lParam));
    
    }
    
    

     

     

    LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass. DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition);

     

    hKey

    새로 만들어지는 키의 부모키를 지정함

    HKEY_CLASSESS_ROOT

    HKEY_CURRENT_USER

    HKEY_LOCAL_MACHINE

    HKEY_USERS

    HKEY_CURRENT_CONFIG

     

    lpSubKey

    만들고자 하는 서비키를 지정하는 널 종료 문자열로 반드시 지정해야함

     

    Reserved

    예약된 인수로 사용하지 않으면 0 지정

     

    lpClass

    생성되는 키의 클래스를 지정하는 문자, 이미 존재하는 키를 오픈할때는 이 인수를 무시하고 지정하지 않을때는 NULL 지정

     

    dwOptions

    생성하는 키의 옵션을 지정함

    REG_OPTION_NON_VOLATILE : 영구저장

    REG_OPTION_VOLATILE : 메모리에 저장

    REG_OPTION_BACKUP_RESTORE : samDesired

     

    samDesired

    새로만든어지는 키의 보안속성

    KEY_ALL_ACCESS : 아래 여섯가지 속성의 집합

    KEY_CREATE_LINK : 심볼릭 링크 생성 허가

    KEY_CREATE_SUB_KEY : 서브 키 생성 허가

    KEY_ENUMERATE_SUB_KEY : 서브 열거 허가

    KEY_NOTIFY : 통지 변경 허가

    KEY_QUERY_VALUE : 값을 읽을 수 있다.

    KEY_SET_VALUE : 값을 쓸 수 있다

    KEY_READ : K_Q_V, K_E_S_K, K_N

    KEY_WRITE : K_S_V, K_C_S_K

    KEY_EXECUTE : 읽기를 허가

     

    lpSecurityAttributes

    생성된 키값이 차일드 프로세스로도 상속될것인지 결정 NULL이면 상속되지 않음

     

    phkResult

    만들어 지거나 열려진 키 값이 대입되는 변수의 포인터

     

    lpdwDisposition

    키가 새로 생성되었는지 기존 키가 오픈된 것인지를 리턴받기 위한 출력용 변수

    REG_CREATED_NEW_KEY 키 새로 생성된 것

    REG_OPENED_EXISTING_KEY 기존키 오픈한 것

     


Designed by Tistory.