-
[ 스크랩 ] 레지스트리 : RegCreateKeyExProgramming 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 기존키 오픈한 것
'Programming' 카테고리의 다른 글
[펌] Dll injection Tutorial (0) 2009.03.25 [펌] Dll injection (0) 2009.03.25 [ 스크랩 ] 레지스트리 레퍼함수 사용.. (0) 2009.03.17 [트리...] 하위구조를 나타나내는 가장 기본적인 방식.. (0) 2009.03.02 Tips & Tricks: Web Server Settings for Web Application Projects now can be stored per user as well as per project (0) 2008.12.15