API used in malware 작성자 : l@ughfo0l 1. 파일관련 API 1.1 파일읽기 BOOL ReadFile( HANDLE hfile, /* 파일핸들 */ LPVOID lpbuffer, /* 읽은데이터를저장할버퍼 */ nnumberofbytestoread, /* 읽고자하는양 */ LP lpnumberofbytesread, /* 실제로읽은양 */ LPOVERLAPPED lpoverlapped); /* 비동기입출력, 보통 NULL */ BOOL CloseHandle( HANDLE hobject ); /* 파일을다읽은후닫음 */ 1.2 파일생성및열기 HANDLE CreateFile ( LPCTSTR lpfilename, /* 파일젃대경로 */ dwdesiredaccess, /* 액세스타입 */ dwsharemode, /* 공유모드 */ LPSECURITY_ATTRIBUTES lpsecurityattributes, /* 차일드로상속여부 */ dwcreationdisposition, /* 파일이있는경우, 없는경우 */ dwflagsandattributes, /* 파일속성 */ HANDLE htemplatefile ); /* 추가속성보통 NULL */ [dwdesiredaccess ( 액세스타입 )] GENERIC_READ GENERIC_WRITE 읽기 쓰기 [dwsharmode ( 공유모드 )] FILE_SHARE_DELETE FILE_SHARE_READ FILE_SHARE_WRITE NT 에서만사용가능, 삭제모드일때만읽기모드로열때만쓰기모드로열때만
[dwcreationdisposition ( 만들고자하는파일이이미있는경우와없는경우처리지정 )] CREATE_NEW CREATE_ALWAYS OPEN_EXISTING OPEN_ALWAYS 없는경우만생성있으면삭제하고새로생성졲재할때만열기없으면새로만들고열기 TRUNCATE_EXISTING 파일을열고크기를 0 으로만든다. (GENERIC_WRITE 모드로열어야한다.) [dwflagsandattributes ( 파일속성 )] FILE_ATTRIBUTE_ATCHIVE FILE_ATTRIBUTE_HIDDEN 아카이브속성 숨은파일 FILE_ATTRIBUTE_NORMAL 보통파일 ( 단독사용만가능 ) FILE_ATTRIBUTE_OFFLINE FILE_ATTRIBUTE_READONLY FILE_ATTRIBUTE_SYSTEM FILE_ATTRIBUTE_TEMPORARY 오프라인파일읽기젂용시스템파일임시파일 1.3 파일쓰기 BOOL WriteFile( HANDLE hfile, /* 파일핸들 */ LPCVOID lpbuffer, /* 데이터가들어가있는버퍼 */ nnumberofbytetowrite, /* 쓰려는바이트수 */ LP lpnumberofbytewritten, /* 실제쓰여짂바이트수 */ LPOVERLAPPED lpoverlapped); /* 비동기입출력보통 NULL */ 1.4 파일임의접근 파일의어디쯤액세스할것인지에대한지정 SetFilePointer(HANDLE hfile, /* 파일핸들 */ LONG ldistancetomove, /* 하위 32 비트 */ PLONG lpdistancetomovehigh, /* 상위 32 비트 */ dwmovemethod); /* 포인터시작위치 */
[dwmovemethod] FILE_BEGIN FILE_CURRENT FILE_END 파일의시작위치에서부터 FP 를이동현재위치에서부터 FP 를이동파일의끝에서부터 FP 를이동 1.5 파일복사 BOOL CopyFile ( LPCTSTR lpexistingfilename, /* 복사대상파일명 */ LPCTSTR lpnewfilename, /* 새로만들어질파일명 */ [bfailifexists] TRUE FALSE BOOL bfailifexists); /* 새로만들어질파일이이미있을때처리지정 */ 새로만들어질파일이이미있다면실패새로만들어질파일이있다면덮어씀 BOOL CopyFileEx( LPCTSTR lpexistingfilename, /* 복사대상파일명 */ LPCTSTR lpnewfilename, /* 새로만들어질파일명 */ LPPROGRESS_ROUTINE lpprogressroutine, /* 복사짂행상황 ( 콜백 ) */ LPVOID lpdata, /* 콜백함수로젂달될데이터인자값 */ LPBOOL pbcancel, /* 복사중지 */ dwcopyflags); /* 어떻게복사할지설정 */ [dwcopyflags] COPY_FILE_ALLOW_DECRYPTED_DESTINATION 0x00000008 COPY_FILE_COPY_SYMLINK 0x00000800 COPY_FILE_FAIL_IF_EXISTS 0x00000001 COPY_FILE_NO_BUFFERING 0x00001000 COPY_FILE_OPEN_SOURCE_FOR_WRITE 0x00000004 암호화된파일에대한복사가능 설정 (Windows 2000 지원불가 ) 심볼릭링크까지복사 (Windows Server 2003, xp/2000 지원불가 ) 새로만들어질파일이있다면실패 처리 복사시버퍼사용안함 (Windows Server 2003,XP/2000 지원불가 ) 복사후원본파일을읽기모드로 연다
COPY_FILE_RESTARTABLE 0x00000002 복사실패후재시도설정 1.6 파일이동및삭제 BOOL MoveFile( LPCTSTR lpexistingfilename, /* 대상파일 */ LPCTSTR lpnewfilename); /* 이동할경로 */ BOOL MoveFileEx( LPCTSTR lpexistingfilename, /* 대상파일 */ LPCTSTR lpnewfilename, /* 이동할경로 */ dwflags); /* 어떻게이동할지에대한설정 */ BOOL DeleteFile(LPCTSTR lpfilename); /* 대상파일 */ int rename( const char *oldname, /* 예젂이름 */ const char *newname); /* 새로운이름 */ GetFileSize(HANDLE hfile, /* 대상파일핸들 */ LP lpfilesizehigh); /* 파일사이즈리턴값 */ GetFileAttributes ( LPCTSTR lpfilename ); /* 대상파일 */ int_access( const char *path, int mode); 파일의졲재여부를확인하는용도로많이쓰임 mode : 0( 졲재 ),2( 읽기 ),4( 쓰기 ),6( 읽기, 쓰기 ), 리턴값이 0 이면참, -1 이면거짒 void_splitpath( const char *path, /* 완젂경로 */ char *drive, /* 드라이브가저장 */ char *dir, /* 경로저장 */ char *fname, /* 파일이름저장 */ char *ext); /* 확장자명 */ 경로를따로따로분리하고싶을때사용하는함수 int SHFileOperation(LPSHFILEOPSTRUCT lpfileop); /* 구조체의멤버로정보젂달 */ typedef struct_shfileopstruct { HWND hwnd; /* 함수를호출하는윈도우의핸들 */ UINT wfunc; /* 어떤종류의작업을할지설정 */ LPCWSTR pfrom; /* 원본파일 */ LPCWSTR pto; /* 목적파일 */ FILEOP_FLAGS fflags; /* 옵션 */ BOOL fanyoperationsaborted; LPVOID hnamemappings; LPCWSTR lpszprogresstitle; /* 짂행대화상자에나타날캡션문자열 */
} SHFILEOPSTRUCT; [wfunc] 값 FO_COPY pfrom 파일을 pto 로복사한다. FO_DELETE pfrom 파일을삭제 FO_MOVE pfrom 파일을 pto 로이동 FO_RENAME pfrom 파일을 pto 로이름을변경 [fflags] FOF_ALLOWUNDO 동작의취소를지원 ( 파일삭제시 휴지통으로보내복원할수있게한다.) pfrom 은반드시완젂경로여야한다. FOF_FILESONLY 와일드카드식은파일만을대상으로한다. FOF_MULTIDESTFILES pto 로여러개의목적파일을지정한다. FOF_NOCONFIRMATION 동작에대한확인을생략 FOF_NOCONFIRMMKDIR 새로운디렉토리를생성할것인지묻지 않는다. FOF_NOERRORUI 동작에실패해도에러를띄우지않는다. FOF_NORECURSION 지정한디렉토리만대상으로하고서브 디렉토리는작업대상에서제외한다. FOF_RENAMEONCOLLISION 기졲파일이름과충돌시새로운이름을 작성한다. FOF_SILENT 짂행대화상자를표시하지않는다. FOF_SIMPLEPROGRESS 짂행을표시하되파일명은표시하지 않는다. 1.7 디렉토리생성 BOOL CreateDirectory ( LPCTSTR lppathname, /* 경로 */ LPSECURITY_ATTRIBUTES lpsecurityattributes); /* 보안자 */ BOOL RemoveDirectory(LPCTSTR lppathname ); /* 경로 */ GetCurrentDirectory( nbufferlength, LPTSTR lpbuffer);
UINT GetSystemDirectory(LPTSTR lpbuffer, UINT usize); UINT GetWindowsDirectory( LPSTR lpbuffer, UINT usize); GetTempPath( LPTSTR nbufferlenth, lpbuffer); 1.8 디스크관리 UINT GetDriveType (LPCTSTR lprootpathname); /* 조사대상디스크의루트 */ 리턴값 DRIVE_UNKNOWN 0 DRIVE_NO_ROOT_DIR 1 DRIVE_REMOVABLE 2 DRIVE_FIXED 3 DRIVE_REMOTE 4 DRIVE_CDROM 5 DRIVE_RAMDISK 6 알수없는타입 루트디렉토리가없다. 이동식디스크 고정된디스크 원격드라이브 CD-ROM 드라이브 램디스크 BOOL GetDiskFreeSpaceEx( LPCTSTR lpdirectoryname, /* 조사대상디스크 */ PULARGE_INTEGER lpfreebytesavailabletocaller, /* 사용가능한용량 */ PULARGE_INTEGER lptotalnumberofbytes, /* 총용량 */ PULARGE_INTEGER lptotalnumberoffreebytes); /* 물리적사용가능용량 */ BOOL SetVolumeLabel( LPCTSTR lprootpathname, LPCTSTR lpvolumename ); BOOL GetVolumeInformation( LPCTSTR lprootpathname, LPTSTR lpvolumenamebuffer, nvolumenamesize, LP lpvolumeserialnumber, LP lpmaximumcomponentlength, /* 최대파일명길이 */ LP lpfilesystemflags, /* 시스템특짓 */ LPTSTR lpfilesystemnamebuffer, nfilesystemnamesize); [lpfilesystemflags] FS_CASE_IS_PRESERVED_NAMES 0x00000002 파일이름의대소문자를구분하여저장
FS_CASE_SENSITIVE_SEARCH 0x00000001 FS_UNICODE_STORED_ON_DISK 0x00000004 FS_PERSISTENT_ACLS 0x00000008 FS_FILE_COMPRESSION 0x00000010 FS_VOL_IS_COMPRESSION 0x00008000 FILE_SUPPORTS_ENCRYPTION 0x00020000 FILE_SUPPORTS_OBJECT_IDS 0x00010000 FILE_SUPPORTS_REPARSE_POINT 0x00000080 FILE_SUPPORTS_SPARSE_FILES 0x00000040 FILE_VOLUME_QUOTAS 0x00000020 대소문자로구분하여다른파일로취급파일이름에유니코드를지원파일시스템에 ACL 을보졲 (NTFS) 파일단위의압축을지원더블스페이스등으로압축된볼륨파일암호화지원오브젝트 ID 를지원 Reparse point 를지원 Sparse file 을지원디스크할당을지원 1.9 파일검색 HANDLE FindFirstFile (LPCTSTR lpfilename, /* 검색식 */ LPWIN32_FIND_DATA lpfindfiledata); BOOL FindNextFile( HANDLE hfindfile, /* 검색핸들 */ LPWIN32_FIND_DATA lpfindfiledata); BOOL FindClose ( HANDLE hfindfile); 예 ) hsrch=findfirstfile( 검색식,&wfd); while(bresult) { // 검색중에하고싶은일 bresult=findnextfile(hsrch,&wfd); } FindClose(hSrch); 1.10 변화감시 HANDLE FindFirstChangeNotification(LPCTSTR lppathname, /* 감시대상 */ BOOL bwatchsubtree, /* 서브디렉토리까지감시할것인지 */ dwnotifyfilter); /* 어떤변화를감시할것인지 */ [dwnotifyfilter]
FILE_NAME DIR_NAME ATTRIBUTES SIZE LAST_WRITE SECURITY 파일명변경, 새로생성, 삭제디렉토리의변경속성의변경파일크기의변경파일최종기록시간변경보안설정의변경 2. 프로세스관련 API 2.1 프로세스의생성 UINT WinExec( LPCSTR lpcmdline, /* 실행하고자하는프로그램의경로 */ UINT ucmdshow ); /* 실행직후프로그램이어떻게보일지지정 */ [ucmdshow] 값 SW_SHOWNORMAL 보통 SW_SHOWMAXIMIZED 최대화 SW_SHOWMINIMIZED 최소화 [ 에러값 ] 에러값 0 리소스부족 ERROR_BAD_FORMAT ERROR_FILE_NOT_FOUND ERROR_PATH_NOT_FOUND 실행불가포맷 파일이없다 경로가없다 BOOL CreateProcess( LPCTSTR lpapplicationname, /* 실행프로그램경로 */ LPTSTR lpcommandline, /* 명령행인수 */ LPSECURITY_ATTRIBUTES lpprocessattributes, /* 프로세스보안설정 */ LPSECURITY_ATTRIBUTES lpthreadattributes, /* 스레드보안설정 */ BOOL binherithandles, /* 핸들상속여부 */ dwcreationflags, /* 우선순위옵션 */ LPVOID lpenvironment, /* 새프로세스의홖경블록지정, 보통 NULL */ LPCTSTR lpcurrentdirectory, /* 새프로세스의작업디렉토리지정,
NULL 이면현재디렉토리 */ LPSTARTUPINFO lpstartupinfo, /* 어떻게초기화될지 ( 구조체 ) */ LPPROCESS_INFORMATION lpprocessinformation); /* 출력용구조체 */ [dwcreationflags] REALTIME_PRIORITY_CLASS 최상위우선권 HIGH_PRIORITY_CLASS 상위우선권 ABOVE_PRIORITY_CLASS 상위우선권 NORMAL_PRIORITY_CLASS 보통우선권 BELOW_PRIORITY_CLASS 하위우선권 IDLE_PRIORITY_CLASS 최하위우선권 [ 참고 ] GetPriorityClass( HANDLE hprocess); // 우선순위구히기 BOOL SetPriorityClass( HANDLE hprocess, dwpriorityclass ); // 우선순위설정하기 [lpstartupinfo] Typedef struct _STARTUPINFO { cb; /* sizeof(startupinfo) 값을대입 */ LPTSTR lpreserved; LPTSTR lpdesktop; LPTSTR lptitle; dwx; dwy; dwxsize; dwysize; dwxcountchars; dwycountchars; dwfillattribute; dwflags; WORD wshowwindow; WORD cbreserved2; LPBYTE lpreserved2; HANDLE hstdinput; HANDLE hstdoutput; HANDLE hstderror; } STARTUPINFO, *LPSTARTUPINFO; [lpstartupinfo.dwflags] STARTF_FORCEONFEEDBACK 피드백커서를사용한다 STARTF_FORCEOFFFEEDBACK 피드백커서를사용하지않는다. STARTF_RUNFULLSCREEN 콘솔프로그램을젂체화면모드로실행한다. (GUI 는적용되지않음 )
STARTF_USECOUNTCHARS STARTF_USEFILLATTRIBUTE STARTF_USEPOSITION STARTF_USESHOWWINDOW STARTF_USESIZE STARTF_USESTDHANDLES dwxcountchars 멤버로콘솔프로그램의문자폭을지정하며 dwycountchars 로높이를지정한다. (GUI 는적용 X) dwfillattribute 멤버로배경색을지정한다.(GUI 는적용 X) dwx,dwy 위치에메인윈도우를배치 wshowwindow 방식대로메인윈도우표시 dwxsize,dwysize 크기로메인윈도우배치표준입력, 표준출력, 표준에러핸들을지정한다. [lpprocessinformation] typedef struct _PROCESS_INFORMATION { HANDLE hprocess; HANDLE hthread; dwprocessid; dwthread; } PROCESS_INFORMATION; HINSTANCE ShellExecute( HWND hwnd, // 부모윈도우핸들 LPCTSTR LPCTSTR LPCTSTR LPCTSTR INT lpoperation, // 어떻게열지설정 lpfile, // 파일경로 lpparameters, lpdirectory, nshowcmd); // 표시형식 이함수는실행파일뿐만아니라일반데이터파일도실행가능 [lpoperation] 동사 open edit explorer print NULL 파일을연다 편집 폴더를연다 인쇄 디폴트, 통상 open 2.2 명령행인수 LPTSTR GetCommandLine(VOID); 현재프로세스의명령행인수를조사해리턴한다. LPWSTR *CommandLineToArgvW(LPCWSTR int *pnumargs); lpcmdline,
2.3 프로세스의종료 VOID ExitProcess( UINT uexitcode); BOOL TerminateProcess (HANDLE hprocess, UINT uexitcode) 자싞이아닌다른프로세스도종료시킬수있다. 2.4 프로세스핸들 HANDLE OpenProcess( dwdesiredaccess, BOOL binherithandle, dwprocessid); HANDLE GetCurrentProcess(VOID); GetCurrentProcessId(VOID); BOOL GetExitCodeProcess( HANDLE hprocess, LP lpexitcode); 프로세스의종료상태를구하는함수, 종료상태를 lpexitcode 에리턴한다. HMODULE GetModuleHandle(LPCTSTR lpmodulename); GetModuleFileName(HMODULE hmodule, LPTSTR lpfilename, nsize); 3. 메모리관련 API 3.1 C 런타임함수 void *malloc( size_t size); void free( void *memblock) void *calloc(size_t num, size_t size); void *realloc( void *memblock, size_t size); 3.2 가상메모리할당 LPVOID VirtualAlloc( LPVOID lpaddress, // 할당하고자하는메모리젃대번지나 NULL 이면자동할당
dwsize, // 할당할메모리의양 flallocationtype, // 할당방법 flprotect); // 할당한페이지의액세스타입보통 PAGE_READWRITE 로지정한다. [flallocationtype] 할당방법 MEM_RESERVE 물리적인메모리의할당없이주소 공간만을예약한다. MEM_COMMIT 물리적인메모리를확정한다. MEM_TOPDOWN 가급적높은번지에메모리를할당한다. (NT 이상에서만사용가능 ) BOOL VirtualFree (LPVOID 할당한페이지를해제한다. [dwfreetype] 값 MEM_DECOMMIT MEM_RELEASE lpaddress, dwsize, dwfreetype); 확정된페이지를확정해제한다예약된페이지를예약해제한다 3.3 보호속성 BOOL VirtualProtect ( LPVOID lpaddress, dwsize, flnewprotect, P lpfloldprotect); 3.4 메모리잠금 BOOL VirtualLock( LPVOID lpaddress, dwsize); BOOL VirtualUnlock( LPVOID lpaddress, dwsize); 3.5 힙으로부터할당 HANDLE GetProcessHeap(VOID) LPVOID HeapAlloc( HANDLE hheap, [dwflags] dwflags, // 할당방법 dwbytes);
HEAP_GENERATE_EXCEPTIONS 에러발생시 NULL 을리턴하지않고대싞 예외를발생시킨다. HEAP_NO_SERIALIZE 힙할당은스레드에안젂하게 동기화되는데이런동기화를하지않는다. HEAP_ZERO_MEMORY 할당한힙을 0 으로초기화한다. BOOL HeapFree (HANDLE LPVOID 할당한메모리해제 hheap, dwflags, lpmem); LPVOID HeapReAlloc( HANDLE LPVOID 이미할당된힙의크기를조정 hheap, dwflags, lpmem, dwbytes); HeapSize( HANDLE hheap, dwflags, LPCVOID lpmem); 힙의크기를구한다 SIZE_T HeapCompact(HANDLE hheap, dwflags); 힙의빈공간을병합하여좀더큰여유공간을만들고과다하게확정된영역은확정 해제하여시스템에반납한다. BOOL HeapValidate( HANDLE hheap, dwflags, LPCVOID lpmem); lpmem 이지정하는블록이유효한블록인지검사한다. BOOL HeapWalk( HANDLE hheap, LPROCESS_HEAP_ENTRY 힙의모든블록을열거한다. lpentry); HANDLE HeapCreate( floptions, // 새로생성되는힙의속성설정, 보통 0 dwinitialsize, // 초기에확정될힙의크기 dwmaximumsize); // 힙의최대크기 BOOL HeapDestroy( HANDLE hheap); // 힙해제 3.6 메모리맵파일 HANDLE CreateFileMapping ( HANDLE hfile, // 대상파일의핸들
LPSECURITY_ATTRIBUTES lpfilemappingattributes, // 보안구조체, NULL flprotect, // 액세스타입지정 dwmaximumsizehigh, // 생성될파일맵핑오브젝트의최대크기 dwmaximumsizelow, // 생성될파일맵핑오브젝트의최대크기 LPCTSTR lpname ); // 파일맵핑오브젝트의이름 [flprotect] 값 PAGE_READONLY 읽기젂용의파일맵핑오브젝트를만든다. PAGE_READWRITE PAGE_WRITECOPY hfile 은반드시 GENERIC_READ 로열려있어야한다. 읽고쓸수있는파일맵핑오브젝트를만든다. hfile 은 GENERIC_READ GENERIC_WRITE 로열려있어야함. 일고쓸수있는파일맵핑오브젝트를만들되쓰기즉시복사 (Write On Copy) 기법을사용한다. LPVOID MapViewOfFile( HANDLE 파일의뷰를주소공간에맵핑한다. [dwdesiredaccess] hfilemappingobject, // 주소공간에맵핑하려는 dwdesiredaccess, // 액세스지정 파일맵핑오브젝트의핸들 dwfileoffsethigh, // 맵핑시작할오프셋위치 dwfileoffsetlow, // 맵핑시작할오프셋위치 dwnumberofbytestomap); FILE_MAP_WRITE 읽고쓸수있다. FILE_MAP_READ 읽을수있다. FILE_MAP_ALL_ACCESS 읽을수도있고쓸수도있다. FILE_MAP_COPY 읽고쓸수있다. 쓰기시도가발생하면 데이터의복사본을만든후쓴다. BOOL UnmapViewOfFile( LPCVOID 뷰를닫는다. lpbaseaddress); 4. 레지스트리관련 API
4.1 레지스트리조작함수 LONG RegCreateKeyEx( HKEY hkey, // 루트키지정 LPCTSTR LPTSTR REGSAM lpsubkey, // 서브키지정 Reserved, // 0 으로지정 lpclass, // 생성되는키의클래스지정, NULL dwoptions, // 생성되는키의옵션지정 samdesired, // 키의보안속성설정 LPSECURITY_ATTRIBUTES lpsecurityattributes, // 생성된키값이 차일드프로세스로도상속될것인지, NULL 이면상속 X PHKEY phkresult, // 키값이대입되는변수의포인터 LP lpdwdisposition); // 키의생성, 기졲여부리턴 레지스트리키를생성하되이미키가생성되어있으면열기만한다. [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_SUM_KEY KEY_NOTIFY 아래여섯가지속성의조합심볼릭링크생성허가서브키생성허가서브키열거허가통지변경허가 KEY_QUERY_VALUE 값을읽을수있다. KEY_SET_VALUE 값을쓸수있다. KEY_READ KEY_QUERY_VALUE KEY_ENUMERATE_SUB_KEY KEY_NOTIFY KEY_WRITE KEY_SET_VALUE KEY_CREATE_SUB_KEY KEY_EXECUTE 실행을허가한다.
LONG RegSetValueEx( HKEY hkey, // 키핸들 LPCTSTR lpvaluename, // 값의이름 ( 좌변 ) 을지정 Reserved, // 사용안함 dwtype, // 값의데이터타입지정 CONST BYTE *lpdata, // 저장하고자하는데이터의포인터 cbdata); // 데이터의크기값 [dwtype] 타입 REG_BINARY 이짂데이터 REG_ 32 비트정수 REG LITTLE_ENDIAN 하위바이트부터저장되는정수 REG BIG_ENDIAN 상위바이트부터저장되는정수 REG_EXPAND_SZ 홖경변수에대한참조식이있는널종료 문자열 REG_LINK 심볼릭링크 REG_MULTI_SZ 두개의널문자로끝나는널문자열의 배열 REG_NONE 타입에대한정의가없음 REG_RESOURCE_LIST 디바이스드라이버의리소스리스트 REG_SZ 널종료문자열 LONG RegQueryValueEx( HKEY hkey, // 키핸들 LPTSTR lpvaluename, // 값의이름 ( 좌변 ) 을지정 LP lpreserved, // 사용안함 LP lptype, // 읽은값의타입을대입받을변수의포인터 LPBYTE lpdata, // 읽혀짂값을대입받을변수의번지 LP lpcbdata); // 위변수의크기값을가지는변수의번지 LONG RegCloseKey ( HKEY 해제 hkey); LONG RegOpenKeyEx( HKEY hkey, LPCTSTR lpsubkey, uloptions, PHKEY phkresult); LONG RegDeleteKey( HKEY hkey, LPCTSTR lpsubkey); LONG RegDeleteValue( HKEY hkey, LPCTSTR lpvaluename);
4.2 정보조사 LONG RegQueryInfoKey ( HKEY hkey, // 조사하고자하는키의핸들 LPTSTR lpclass, // 클래스스트링 LP lpcbclass, // 클래스스트링버퍼의크기 LP lpreserved, // 예약 LP lpcsubkeys, // 서브키의개수 LP lpcbmaxsubkeylen, // 가장긴이름의서브키길이 LP lpcbmaxclasslen, // 가장긴클래스길이 LP lpcvalues, // 값의개수 LP lpcbmaxvaluenamelen, // 가장긴이름값길이 LP lpcbmaxvaluelen, // 가장긴데이터의길이 LP lpcbsecuritydescriptor, // 보안속성의길이 PFILETIME lpftlastwritetime); // 최후수정시간 레지스트리키의정보를조사하는함수 LONG RegEnumKeyEx( HKEY hkey, // 루트키 dwindex, // 조사할서브키의번호 LPTSTR lpname, // 서브키의이름 LP lpcbname, // 이름의길이 LP lpreserved, // 예약 LPTSTR lpclass, // 클래스명 LP lpcbclass, // 클래스명의길이 PFILETIME lpftlastwritetime); // 최후수정시간 LONG RegEnumValue( HKEY hkey, // 루트키 dwindex, // 조사할값의번호 LPTSTR lpvaluename, // 서브키의이름 LP lpcbvaluename, // 이름의길이 LP lpreserved, // 예약 LP lptype, LPBYTE lpdata, LP lpcbdata);