*유니코드기반의함수들
SBCS 함수
|
WBCS 기반의 문자열 조작 함수
|
strlen
|
size_t wcslen(const wchar_t* string);
|
Strcpy
|
wchar_t* wcscpy(wchar_t* dest,const wcahr_t* src)
|
strncpy
|
wchar_t* wcsncpy(wchar_t* dest,const wchar_t* src, size_t cnt)
|
strcat
|
wchar_t* wcscat(wchar_t* dest,const wchar_t* src)
|
strncat
|
wchar_t* wcsncat(wchar_t* dest,const wchar_t* src,size_t cnt)
|
strcmp
|
int wcscmp(const wchar_t* s1,const wchar_t* s2)
|
Strncmp
|
int wcsncmp(const wchar_t* s1,const wchar_t* s2, size_t cnt)
|
* 문자열 입출력 함수
SBCS 함수
|
WBCS 기반의 문자열 입출력 함수
|
printf
|
int wprintf(const wchar_t* format [,argument]..);
|
scanf
|
int wscanf(const wchar_t* format [,argument]..);
|
fgets
|
wchar_t* fgetws (wchar_t* string,int n,
|
fputs
|
int fputws (const wchar_t* string,FILE* stream);
|
* 참고
_wsetlocale(LC_ALL,L"korean"); // #include<locale.h>
=> 유니코드기반으로한글을출력하고싶을때사용한다.
=> 위함수는각나라및지역에대한정보를설정하는데사용되는함수다.
*tchar.h 헤더파일을참고할것.
===================================================== 2 장 ========================================================================
*GetLastError()함수
=> 에러코드를 반환해 준다.
============================================5 장 =============================================================
*GetCurrentDirectory() 함수
원형
|
DWORD WINAPI GetCurrentDirectory( __in DWORD nBufferLength, __out LPTSTR lpBuffer);
|
- 인자 값으로 버퍼의 길이와 버퍼의 주소를 넘겨 준다.
*SetCurrentDirecotry() 함수
원형
|
BOOL WINAPI SetCurrentDirectory( __in LPCTSTR lpPathName);
|
- 인자 값으로 경로를 세팅해준다. 주소 값.
*CreateProcess() 함수
원형
|
BOOL WINAPI CreateProcess(
__in_opt LPCTSTR lpApplicationName,
__inout_opt LPTSTR lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in_opt LPVOID lpEnvironment,
__in_opt LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
원본 위치 <http://msdn.microsoft.com/en-us/library/ms682425%28v=VS.85%29.aspx>
|
- 인자 값은 5장 CreateProcess판을 참고할 것!!!
*ZeroMemory() 함수
원형
|
void ZeroMemory( [in] PVOID Destination, [in] SIZE_T Length);
|
-> PVOID == void*
-> ULONG_PTR == SIZE_T, *PSIZE_T;
=========================================6 장 ================================================
*SetPriorityClass() 함수
- 커널 오브젝트에 저장된 프로세스 우선순위를 높인다.
원형
|
BOOL WINAPI SetPriorityClass( __in HANDLE hProcess, __in DWORD dwPriorityClass);
|
- 핸들 값과 , 높일 우선순위가 넘어간다.
*GetCurrentProcess() 함수
- 현재 프로세스의 핸들 정보가 반환 된다.
원형
|
HANDLE WINAPI GetCurrentProcess(void);
|
*CloseHandle() 함수
- 핸들 테이블의 핸들을 제거 해주고 커널 오브젝트의 UC를 줄여준다.
원형
|
BOOL WINAPI CloseHandle( __in HANDLE hObject);
|
*TerminateProcess() 함수
- 강제로 종료를 요청하는 함수
- 되도록이면 안 쓰는 것이 좋다.
원형
|
BOOL WINAPI TerminateProcess( __in HANDLE hProcess, __in UINT uExitCode);
|
================================================7 장 =================================================
*CreateMailslot() 함수
- 메일 슬롯 생성.
원형
|
HANDLE WINAPI CreateMailslot(
__in LPCTSTR lpName,
__in DWORD nMaxMessageSize,
__in DWORD lReadTimeout,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
|
-> lpName: 생성하는 메일슬롯의 이름을 결정
-> nMaxMessageSize: 메일슬롯의 버퍼 크기를 지정. 0이 전달되면 시스템이 허용하는 최대 크기로 지정.
-> lReadTimeout: 메일슬롯을 통해 전송된 데이터를 읽기 위해서 파일 입출력 함수인 ReadFile 함수가 사용되는데 메일 슬롯이 비어 있다면 데이터가 채워질 때 까지 blocking을 하게 되
데 최대 블로킹 시간을 정해준다. MAILSLOT_WAIT_FOREVER를 인자로 전달하면 무한 블로킹. 0 일 경우 그냥 빠져 나옴.
-> lpSecurityAttributes: 핸들을 상속하기 위한 용도.
*WaitForSingleObject() 함수
- 커널 오브젝트의 상태를 확인할 수 있음.
- Signaled 상태가 되었을 때 반환된다.
- 뮤텍스를 얻을 때에도 쓴다.
원형
|
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
|
- hHandle : 커널 오브젝트의 핸들 전달
- dwMilliseconds : 대기 시간 설정. INFINITE를 인자로 전달하면, 무한정 기다림.
- 반환 값 [표]
Return code/value
|
Description
|
WAIT_ABANDONED
0x00000080L
|
정상적이지못한오류발생에의해서반환
|
WAIT_OBJECT_0
0x00000000L
|
시그널상태였을때반환
|
WAIT_TIMEOUT
0x00000102L
|
시간초과
|
WAIT_FAILED
(DWORD)0xFFFFFFFF
|
The function has failed. To get extended error information, call GetLastError.
|
* WaitForMultipleObjects() 함수
원형
|
DWORD WINAPI WaitForMultipleObjects(
__in DWORD nCount, //배열에 저장된 핸들 개수
__in const HANDLE *lpHandles, // 핸들을 저장하고 있는 배열의 주소
__in BOOL bWaitAll, // 모두 Signaled 상태가 되기(TRUE)를 기다리고자 하는지, 아니면 하나라도 Signaled 상태 반환(FALSE)인지 결정
__in DWORD dwMilliseconds //대기 시간.
);
|
=> 커널 오브젝트가 둘 이상이고, 핸들이 배열로 묶여 있을 때 가능.
*GetExitCodeProcess() 함수
- 종료 코드를 가져오는 함수.
원형
|
BOOL WINAPI GetExitCodeProcess(
__in HANDLE hProcess,
__out LPDWORD lpExitCode
);
|
========================================= 8 장 ===========================================================
*GetCurrentProcess() 함수
- 현재 프로세스의 가짜 핸들을 반환
원형
|
HANDLE WINAPI GetCurrentProcess(void);
|
*DuplicateHandle() 함수
- 핸들을 복제 함
원형
|
BOOL WINAPI DuplicateHandle(
__in HANDLE hSourceProcessHandle, // 복제할 핸들을 소유한 프로세스
__in HANDLE hSourceHandle, // 복제할 핸들
__in HANDLE hTargetProcessHandle, // 복제된 핸들을 소유할 프로세스
__out LPHANDLE lpTargetHandle, // 복제된 핸들 값을 저장할 변수의 주소!!
__in DWORD dwDesiredAccess, // 걍 null
__in BOOL bInheritHandle, //상속 여부
__in DWORD dwOptions //옵션.
);
|
*CreatePipe() 함수
- 이름 없는 파이프를 생성해주는 함수
- 두 개의 핸들을 얻게 됨.
원형
|
BOOL WINAPI CreatePipe(
__out PHANDLE hReadPipe, //읽는 핸들
__out PHANDLE hWritePipe, //쓰는 핸들
__in_opt LPSECURITY_ATTRIBUTES lpPipeAttributes,
__in DWORD nSize
);
|
*CreateNamedPipe() 함수
- 이름 있는 파이프를 생성해주는 함수
- 이름있는 파이프를 만듬.
원형
|
HANDLE WINAPI CreateNamedPipe(
__in LPCTSTR lpName, // 파이프 이름 지정. 형식: \\.\pipe\pipename
__in DWORD dwOpenMode, //파이프 읽기 또는 쓰기 모드 설정.
__in DWORD dwPipeMode, // 모드 설정.( 데이터 전송 타입, 데이터 수신 타입, 블로킹 모드. 3가지 설정)
__in DWORD nMaxInstances, // 파이프의 최대 개수
__in DWORD nOutBufferSize, // 파이프의 출력 버퍼 사이즈
__in DWORD nInBufferSize, // 입력 버퍼 사이즈
__in DWORD nDefaultTimeOut, // 만료 시간
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes //보안 속성.
);
|
*dwPipeMode에 대한 추가 설명
데이터 전송 방식
|
PIPE_TYPE_BYTE(바이트), PIPE_TYPE_MESSAGE(메시지) : 바이너리 형태로 전송할 것인지 메시지 방식으로 전송할 것 인지 선택
|
데이터 수신 방식
|
PIPE_READMODE_BYTE(바이트), PIPE_TYPE_MESSAGE(메시지) : 바이너리 방식(바이트 스트림)으로 읽을 지 메시지 방식으로 읽을지
|
함수 리턴 방식
|
PIPE_WAIT(블로킹), PIPE_NOWAIT(넌-블로킹) :무조건 PIPE_WAIT을 전달.
|
*ConnectNamePipe() 함수
파이프를 연결 요청 대기 상태로 변경시킬 때 사용하는 함수.
원형
|
BOOL WINAPI ConnectNamedPipe(
__in HANDLE hNamedPipe,
__inout_opt LPOVERLAPPED lpOverlapped
);
|
*WaitNamedPipe() 함수
- 서버의 대기 시간에 따라 클라이언트를 대기하게 끔 만들어 줌
원형
|
BOOL WINAPI WaitNamedPipe(
__in LPCTSTR lpNamedPipeName, //파이프 이름
__in DWORD nTimeOut // 대기 시간
);
|
*SetNamedPipeHandleState() 함수
- 파이프의 모드를 변경시켜준다.
원형
|
BOOL WINAPI SetNamedPipeHandleState(
__in HANDLE hNamedPipe, //파이프 이름
__in_opt LPDWORD lpMode, //읽기 모드와 함수 리턴방식에 대한 값을 전달.
__in_opt LPDWORD lpMaxCollectionCount, //버퍼링할 수 있는 바이트 크기
__in_opt LPDWORD lpCollectDataTimeout // 버퍼링을 허용하는 최대 시간. 클라이언트와 서버가 같은 PC 상에서 동작한다면 반드시 NULL을 전달해야 한다.
);
|
*FlushFileBuffers() 함수
- 파일 버퍼를 비우는 역할. 비우면서 전송하는 것?
원형
|
BOOL WINAPI FlushFileBuffers(
__in HANDLE hFile
);
|
*DisconnectNamedPipe() 함수
- 클라이언트가 에러 메시지를 받을 수 있도록 도와준다.
원형
|
BOOL WINAPI DisconnectNamedPipe(
__in HANDLE hNamedPipe
);
|
*SetEnvironmentVariable() 함수
- 환경변수에 등록한다.
원형
|
BOOL WINAPI SetEnvironmentVariable(
__in LPCTSTR lpName, //Key
__in_opt LPCTSTR lpValue //value
);
|
*GetEnvironmentVariable() 함수
- 환경 변수를 key를 통해 value 값을 가지고 와서 버퍼에 저장한다.
원형
|
DWORD WINAPI GetEnvironmentVariable(
__in_opt LPCTSTR lpName, //key
__out_opt LPTSTR lpBuffer, // value가 담길 버퍼
__in DWORD nSize // 버퍼 사이즈
);
|
===================================12 장 =========================================
*CreateThread() 함수
- 쓰레드를 생성해주는 함수
원형
|
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes, //핸들의 상속여부를 결정.
__in SIZE_T dwStackSize, //스택 사이즈
__in LPTHREAD_START_ROUTINE lpStartAddress, //함수 포인터
__in_opt LPVOID lpParameter, //함수 전달 인자
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId //쓰레드 식별자
);
|
*GetExitCodeThread() 함수
- 쓰레드 종료 시 반환 되는 값을 얻을 수 있다.
원형
|
BOOL WINAPI GetExitCodeThread(
__in HANDLE hThread,
__out LPDWORD lpExitCode
);
|
*ExitThread() 함수
- 특정 위치에서 쓰레드의 실행을 종료
원형
|
VOID WINAPI ExitThread(
__in DWORD dwExitCode
);
|
- 커널 오브젝트에 등록되는 쓰레드 종료코드를 지정.
*TerminateThread() 함수
- 외부에서 쓰레드를 종료
원형
|
BOOL WINAPI TerminateThread(
__inout HANDLE hThread,
__in DWORD dwExitCode
);
|
*_beginthreadex() 함수
- 임계영역에 접근 문제를 해결 하기 위해 독립된 메모리를 할당해준다.
원형
|
uintptr_t _beginthreadex(
void *security,
unsigned stack_size,
unsigned ( *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);
|
*_endthreadex() 함수
- 쓰레드에 할당된 메모리 블록을 해제하는 역할
원형
|
void _endthreadex(
unsigned retval
);
|
*SuspendThread() 함수
- Running 상태의 Thread를 Blocked 상태로 만들어 준다
- suspend count를 증가시키는 역할.
원형
|
DWORD WINAPI SuspendThread(
__in HANDLE hThread
);
|
*ResumeThread() 함수
- Blocked 상태의 Thread를 Ready 상태로 만들어 준다.
- suspend count를 감소시키는 역할
원형
|
DWORD WINAPI ResumeThread(
__in HANDLE hThread
);
|
*SetThreadPriority() 함수
- 쓰레드의 우선순위 세팅
원형
|
BOOL WINAPI SetThreadPriority(
__in HANDLE hThread,
__in int nPriority
);
|
- 우선순위는 참고할 것.
*GetThreadPriority() 함수
- 쓰레드의 우선순위를 가져오는 함수
원형
|
int WINAPI GetThreadPriority(
__in HANDLE hThread
);
|
============================================ 13 장 ==================================================
*InitializeCriticalSection() 함수
- 크리티컬 섹션 오브젝트를 초기화 해주는 함수
원형
|
void WINAPI InitializeCriticalSection(
__out LPCRITICAL_SECTION lpCriticalSection
);
|
*EnterCriticalSection() 함수
- 임계영역에 접근 하기 위해서 크리티컬 섹션 오브젝트를 획득하는 함수
원형
|
void WINAPI EnterCriticalSection(
__inout LPCRITICAL_SECTION lpCriticalSection
);
|
*LeaveCriticalSection() 함수
- 임계영역을 빠져 나와서 크리티컬 섹션 오브젝트를 반환하는 함수
원형
|
void WINAPI LeaveCriticalSection(
__inout LPCRITICAL_SECTION lpCriticalSection
);
|
*DeleteCriticalSection() 함수
- 크리티컬 섹션 오브젝트의 리소스를 반환 해주는 함수,
원형
|
void WINAPI DeleteCriticalSection(
__inout LPCRITICAL_SECTION lpCriticalSection
);
|
-------- 위에는 크리티컬 기반의 동기화에 사용 되는 함수들 --------------
* InterlockedIncrement() 함수
- 임계영역의 값을 동기화 시키고 +1 시켜주는 함수.
원형
|
LONG __cdecl InterlockedIncrement(
__inout LONG volatile *Addend
);
|
*InterlockedDecrement() 함수
- 임계영역의 값을 동기화 시키고 -1 시켜주는 함수.
원형
|
LONG __cdecl InterlockedDecrement(
__inout LONG volatile *Addend
);
|
------- 위에는 인터락 함수를 이용한 동기화에 사용되는 함수들 -----------------------
*CreateMutex() 함수
- 뮤텍스의 커널 오브젝트의 핸들 값을 반환 한다.
원형
|
HANDLE WINAPI CreateMutex(
__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in_opt LPCTSTR lpName
);
|
*ReleaseMutex() 함수
- 뮤텍스를 Signaled 상태로 만들어 주는 함수
원형
|
BOOL WINAPI ReleaseMutex(
__in HANDLE hMutex
);
|
*OpenMutex() 함수
- 이름있는 뮤텍스의 핸들을 가져 온다.
원형
|
HANDLE WINAPI OpenMutex(
__in DWORD dwDesiredAccess, //뮤텍스로의 접근권한을 지정.
__in BOOL bInheritHandle, // 핸들 상속.
__in LPCTSTR lpName //뮤텍스의 이름.
);
|
========================================== 14 장 =========================================================
*CreateEvent() 함수
- 이벤트 오브젝트를 생성하는데 사용 되는 함수.
원형
|
HANDLE WINAPI CreateEvent(
__in_opt LPSECURITY_ATTRIBUTES lpEventAttributes,
__in BOOL bManualReset, // 수동 리셋(TRUE), 자동리셋(FALSE)
__in BOOL bInitialState, //signaled=TRUE, non-signaled=FALSE
__in_opt LPCTSTR lpName
);
|
*ResetEvent() 함수
- 수동으로 이벤트 오브젝트를 non-signaled로 바꿔 줄 때 사용
원형
|
BOOL WINAPI ResetEvent(
__in HANDLE hEvent
);
|
*SetEvent() 함수
- 이벤트 오브젝트를 signaled 상태로 바꿔 줄 때 사용.
원형
|
BOOL WINAPI SetEvent(
__in HANDLE hEvent
);
|
*CreateWaitableTimer() 함수
- 타이머 오브젝트를 생성해주는 함수.
- 타이머 오브젝트는 무조건 non-signaled 상태로 생성된다.
원형
|
HANDLE WINAPI CreateWaitableTimer(
__in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
__in BOOL bManualReset,
__in_opt LPCTSTR lpTimerName
);
|
*SetWaitableTimer() 함수
- signaled로 바꿀 타이머 설정하는 함수.
원형
|
BOOL WINAPI SetWaitableTimer(
__in HANDLE hTimer,
__in const LARGE_INTEGER *pDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in BOOL fResume
);
|
===================================== 17 장 ========================================
*RaiseException() 함수
- 소프트웨어 예외를 발생시키는 역할.
원형
|
void WINAPI RaiseException(
__in DWORD dwExceptionCode, // 발생시킬 예외의 형태를 지정
__in DWORD dwExceptionFlags, // 예외발생 이후의 실행방식에 있어서 제한을 둘 때 사용한다.
__in DWORD nNumberOfArguments, // 추가정보의 개수를 지정한다.
__in const ULONG_PTR *lpArguments // 추가정보를 전달한다.
);
|
1. dwExceptionCode에 대한 설명
=> dwExeptionCode에서 bit 단위 별 의미.
=> C: 커스텀 or Microsoft
=> R: Reserved
=> Sev: 심각 정도. 이건 표 참고(p571)
=> Code: Exception Code를 의미
2. dwExecptionFlags에 대한 설명
- EXEPTION_CONTINUE_EXECUTION을 넘겨 주면 EXECTION_CONTINUEW_EXECUTION의 예외처리 흐름을 막는 용도로 사용된다.
======================================== 18 장 ======================================
* CreateFile() 함수
- 파일을 생성하거나 열 때 핸들 값을 얻어오는 함수.
원형
|
HANDLE WINAPI CreateFile(
__in LPCTSTR lpFileName, //파일 이름.
__in DWORD dwDesiredAccess, // 읽기/쓰기 모드.
__in DWORD dwShareMode, // 파일 공유 방식 지정.
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 보안 속성.
__in DWORD dwCreationDisposition, // 파일이 생성 되는 방법.
__in DWORD dwFlagsAndAttributes, // 파일의 특성 정보를 설정.
__in_opt HANDLE hTemplateFile // 기존에 존재하는 파일과 동일한 특성을 가지는 새 파일을 만들 때 사용.
);
|
-> 기타 속성 값은 MSDN을 참고 할 것.
*ReadFile() 함수
- 파일에 데이터를 읽을 때 사용하는 함수
원형
|
BOOL WINAPI ReadFile(
__in HANDLE hFile, //읽을 파일 핸들
__out LPVOID lpBuffer, //읽은 데이터를 저장할 버퍼의 주소 값.
__in DWORD nNumberOfBytesToRead, // 읽어 들일 데이터의 크기
__out_opt LPDWORD lpNumberOfBytesRead, // 읽어 들인 데이터의 크기의 변수 주소 값.
__inout_opt LPOVERLAPPED lpOverlapped //
);
|
*WriteFile() 함수
- 파일에 데이터를 쓸 때 사용하는 함수
원형
|
BOOL WINAPI WriteFile(
__in HANDLE hFile,
__in LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__out_opt LPDWORD lpNumberOfBytesWritten,
__inout_opt LPOVERLAPPED lpOverlapped
);
|
*GetFiletime() 함수
- MAC 타임을 얻기 위한 함수.
- FILETIME 구조체는 시간 정보를 나타내는 8바이트 자료형. UTC 기반으로 시간을 표현해 준다.
원형
|
BOOL WINAPI GetFileTime(
__in HANDLE hFile,
__out_opt LPFILETIME lpCreationTime,
__out_opt LPFILETIME lpLastAccessTime,
__out_opt LPFILETIME lpLastWriteTime
);
|
* FileTimeToSystemTime() 함수
- 시간 포멧을 변경해준다.
원형
|
BOOL WINAPI FileTimeToSystemTime(
__in const FILETIME *lpFileTime,
__out LPSYSTEMTIME lpSystemTime
);
|
* 시간 포멧 변경 시 필요한 구조체.
typedef struct _SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME;
|
*SystemTimeToTzSpecificLocalTime() 함수
- UTC를 지역별, 국가별 시간대로 변경해준다.
원형
|
BOOL WINAPI SystemTimeToTzSpecificLocalTime(
__in_opt LPTIME_ZONE_INFORMATION lpTimeZone, //시간대에 대한 정보.NULL 전달 시 현재 시스템의 시간대 정보가 기준이 된다.
__in LPSYSTEMTIME lpUniversalTime,
__out LPSYSTEMTIME lpLocalTime
);
|
*GetFileSize() 함수
- file사이즈를 가져오는 함수
- 4G이상은 불가.
원형
|
DWORD WINAPI GetFileSize(
__in HANDLE hFile,
__out_opt LPDWORD lpFileSizeHigh
);
|
*GetFileSizeEx() 함수
-4G 이상의 파일 사이즈를 얻어주는 함수
원형
|
BOOL WINAPI GetFileSizeEx(
__in HANDLE hFile,
__out PLARGE_INTEGER lpFileSize
);
|
-> LARGE_INTEGER 구조체에는 8Byte를 상하위 비트로 나누어서 담는다.
*GetFileAttributes() 함수
- 파일 특성 정보는 반환 값으로 담긴다.
원형
|
DWORD WINAPI GetFileAttributes(
__in LPCTSTR lpFileName
);
|
- 32 bit DWORD 값에 비트 별로 속성 값이 들어 가게 된다. 총 12가지 정보가 들어간다.
- 비트 별 정보는 msdn을 참고할 것!
*SetFileAttributes() 함수
- 파일 특성 정보를 세팅한다
원형
|
BOOL WINAPI SetFileAttributes(
__in LPCTSTR lpFileName,
__in DWORD dwFileAttributes
);
|
*GetFileInformationByHandle() 함수
- 핸들을 이용해 파일 정보를 얻어오는 함수
원형
|
BOOL WINAPI GetFileInformationByHandle(
__in HANDLE hFile,
__out LPBY_HANDLE_FILE_INFORMATION lpFileInformation
);
|
*_BY_HANDLE_FILE_INFORMATION의 원형
typedef struct _BY_HANDLE_FILE_INFORMATION {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD dwVolumeSerialNumber;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD nNumberOfLinks;
DWORD nFileIndexHigh;
DWORD nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION;
|
*GetFullPathName() 함수
- 파일 이름을 통해서 파일경로 정보를 얻어주는 함수
원형
|
DWORD WINAPI GetFullPathName(
__in LPCTSTR lpFileName,
__in DWORD nBufferLength, //저장 가능한 문자열의 길이임을 주의할 것!!
__out LPTSTR lpBuffer,
__out LPTSTR *lpFilePart //버퍼의 특정 위치를 가리키는 포인터 값이 저장. 마지막 역슬래시 다음 번지 주소 값이 저장됨.
);
|
*SetFilePointer() 함수
- 파일 포인터의 위치를 정해준다.
원형
|
DWORD WINAPI SetFilePointer(
__in HANDLE hFile,
__in LONG lDistanceToMove, //32bit 기반일 때 이 인자 값만 사용. 이동시킬 거리를 지정.
__inout_opt PLONG lpDistanceToMoveHigh, //64bit 기반일 때 상위 4Byte 값이 담긴다. 32bit에서는 NULL 전달.
__in DWORD dwMoveMethod
);
|
*CreateDirectory() 함수
- 디렉터리 생성.
원형
|
BOOL WINAPI CreateDirectory(
__in LPCTSTR lpPathName,
__in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
|
*RemoveDirectory() 함수
- 디렉토리 제거
원형
|
BOOL WINAPI RemoveDirectory(
__in LPCTSTR lpPathName
);
|
*GetCurrentdirectory() 함수
- 현재 디렉토리를 얻어온다.
원형
|
DWORD WINAPI GetCurrentDirectory(
__in DWORD nBufferLength,
__out LPTSTR lpBuffer
);
|
*SetCurrentDirectory() 함수
- 현재 디렉토리 위치를 변경한다.
원형
|
BOOL WINAPI SetCurrentDirectory(
__in LPCTSTR lpPathName
)
|
* GetSystemDirectory() 함수
- 시스템 디렉터리의 위치를 얻어온다.
원형
|
UINT WINAPI GetSystemDirectory(
__out LPTSTR lpBuffer,
__in UINT uSize
);
|
*GetWindowsDirectory() 함수
- window 디렉토리의 위치를 얻어온다
원형
|
UINT WINAPI GetWindowsDirectory(
__out LPTSTR lpBuffer,
__in UINT uSize
);
|
*SearchPath() 함수
- 파일의 위치를 찾아준다.
원형
|
DWORD WINAPI SearchPath(
__in_opt LPCTSTR lpPath,
__in LPCTSTR lpFileName,
__in_opt LPCTSTR lpExtension,
__in DWORD nBufferLength,
__out LPTSTR lpBuffer,
__out_opt LPTSTR *lpFilePart
);
|
-> 표준 검색 경로
1. 실행 중인 프로그램이 로드 된 디렉토리
2. 현재 디렉토리
3. 시스템 디렉토리
4. windows 디렉토리
5. 환경변수 PATH에 등록된 디렉토리
*FindFirstFile() 함수
- 파일 목록 중 첫 번째 파일의 핸들 값을 반환. 정보는 두 번째 인자에 저장.
원형
|
HANDLE WINAPI FindFirstFile(
__in LPCTSTR lpFileName,
__out LPWIN32_FIND_DATA lpFindFileData
);
|
*FindNextFile() 함수
- 파일 목록 중 다음 파일의 핸들 값을 반환. 정보는 두 번째 인자에 저장.
원형
|
BOOL WINAPI FindNextFile(
__in HANDLE hFindFile,
__out LPWIN32_FIND_DATA lpFindFileData
);
|
*FindClose() 함수
- 생성된 커널 오브젝트를 해제.
원형
|
BOOL WINAPI FindClose(
__inout HANDLE hFindFile
);
|
*파일 정보 저장되는 구조체.
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA, *LPWIN32_FIND_DATA;
|
================================================ 19 장 =====================================
*GetOverlappedResult() 함수
- I/O 연산이 완료된 이후에 전송된 데이터 크기 확인을 위함.
원형
|
BOOL WINAPI GetOverlappedResult(
__in HANDLE hFile, // 입력 및 출력 결과 학인을 위한 파이프 핸들
__in LPOVERLAPPED lpOverlapped, // overlapped 구조체 변수의 주소 값
__out LPDWORD lpNumberOfBytesTransferred, // 실제 전송이 완료된 바이트 크기를 얻기 위한 변수의 주소 값
__in BOOL bWait // I/O 연산이 끝나지 않은 상황에서의 처리를 결정.
);
|
*WriteFileEx() 함수
- 완료 루틴이 추가 됨.
원형
|
BOOL WINAPI WriteFileEx(
__in HANDLE hFile,
__in_opt LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__inout LPOVERLAPPED lpOverlapped,
__in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine //완료 루틴.
);
|
*ReadFileEx() 함수
- 완료 루틴이 추가 됨
원형
|
BOOL WINAPI ReadFileEx(
__in HANDLE hFile,
__out_opt LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__inout LPOVERLAPPED lpOverlapped,
__in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
|
*OVERLAPPED_COMPLETION_ROUTINE 함수 포인터 모양.
원형
|
typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE) (
[in] DWORD dwErrorCode,
[in] DWORD dwNumberOfBytesTransfered,
[in] LPVOID lpOverlapped
);
|
*SetWaitableTimer() 함수
- 완료 루틴 타이머. 일정 시간이 되면 콜백함수를 호출한다.
원형
|
BOOL WINAPI SetWaitableTimer(
__in HANDLE hTimer,
__in const LARGE_INTEGER *pDueTime,
__in LONG lPeriod,
__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
__in_opt LPVOID lpArgToCompletionRoutine,
__in BOOL fResume
);
|
* SetWaitableTimer 함수의 네 번째 인자 값.
원형
|
VOID CALLBACK TimerAPCProc(
__in_opt LPVOID lpArgToCompletionRoutine,
__in DWORD dwTimerLowValue,
__in DWORD dwTimerHighValue
);
|
*QueueUserAPC() 함수
- APC Queue에 호출하고자 하는 함수 정보를 전달 할 때 사용하는 함수
원형
|
DWORD WINAPI QueueUserAPC(
__in PAPCFUNC pfnAPC, //비동기로 호출될 함수를 지정
__in HANDLE hThread, // APC Queue를 소유하는 쓰레드 핸들을 지정.
__in ULONG_PTR dwData // 등록된 함수 호출 시 전달할 인자.
);
|
========================================== 20 장 =================================================
*VirtualAlloc() 함수
- 가상 메모리를 할당해주는 함수
- MEM_RESERVE 와 MEM_COMMIT으로 메모리의 상태를 설정해줄 수 있다.
원형
|
LPVOID WINAPI VirtualAlloc(
__in_opt LPVOID lpAddress, //메모리의 시작 주소. NULL 전달시 임의의 주소 할당됨.
__in SIZE_T dwSize, //할당하고자 하는 메모리의 크기를 바이트 단위로.
__in DWORD flAllocationType, //메모리 할당의 타입을 결정. MEM_RESERVE, MEM_COMMIT
__in DWORD flProtect //페이지별 접근방식에 제한을 두는 용도로 사용.
);
|
*VirtualFree() 함수
- 할당한 메모리를 해제 해주는 함수.
원형
|
BOOL WINAPI VirtualFree(
__in LPVOID lpAddress,
__in SIZE_T dwSize,
__in DWORD dwFreeType //MEM_DECOMMIT과 MEM_RELEASE 를 전달.
);
|
*HeapCreate() 함수
- 힙을 생성하는 함수
원형
|
HANDLE HeapCreate(
DWORD flOptions, // 생성되는 힙의 특성을 부여 (0 을 전달시 가장 일반적인 힙 생성)
// HEAP_GENERATE_EXCEPTIONS : 오류 발생시 NULL이 아닌 예외 발생
// HEAP_NO_SERIALIZE : 생성된 힙의 메모리 할당과 해제에 대해 동기화 처리를 하지 않는다.
SIZE_T dwInitialSize, // dwMaximumSize 에서 지정한 메모리 중에서 초기에 할당할 COMMIT 페이지를 지정한다
SIZE_T dwMaximumSize // 생성되는 힙의 크기 결정.
// 지정하는 크기에 해당하는 페이지의 수만큼 RESERVE 상태가 된다.
// 0이 아닐 경우 힙은 증가 가능 한 메모리(Growable Heap)가 된다
);
출처http://dakuo.tistory.com/128
|
*HeapDestroy() 함수
- 힘을 해제시키는 함수
*HeapAlloc() 함수
- 힙에 메모리를 할당하는 함수.
- 요청 크기에 해당하는 페이지 수만큼 COMMIT 상태로 변경시킨다.
원형
|
LPVOID HeapAlloc(
HANDLE hHeap, // 메모리 할당이 이뤄질 힙의 핸들
DWORD dwFlags, // HEAP_GENERATE_EXCEPTIONS : 오류 발생시 NULL이 아닌 예외 발생
// HEAP_NO_SERIALIZE : 함수 호출 시 동기화 처리되지 않는다.
// (HeapCreate 함수호출에서 지정했다면 중복 지정 할 필요는 없다)
// HEAP_ZERO_MEMORY : 할당된 메모리는 0으로 초기화
// 둘 이상의 속성을 비트 단위 연산자 OR( | )로 동시 지정 가능
SIZE_T dwBytes // 할당하고자 하는 메모리의 크기를 지정
// (증가 가능 한 힙이 아닐 경우 최대 크기 0x7FFF8)
);
출처http://dakuo.tistory.com/128
|
*HeapFree() 함수
- 힙에 메모리를 해제하는 함수
- Reserve 상태도 가능
원형
|
BOOL HeapFree(
HANDLE hHeap, // 해제할 메모리를 담고 있는 힙을 지정
DWORD dwFlags, // HEAP_NO_SERIALIZE 가 인자로 올 수 있다, 일반적 : 0
// (HeapCreate 함수호출에서 지정했다면 중복지정할 필요는 없다)
LPVOID lpMem // 해제할 메모리의 시작 주소 지정
);
출처http://dakuo.tistory.com/128
|
*CreateFileMapping() 함수
- 파일 연결 오브젝트 생성을 위한 함수
원형
|
HANDLE WINAPI CreateFileMapping(
__in HANDLE hFile, //파일 핸들
__in_opt LPSECURITY_ATTRIBUTES lpAttributes, //보안 속성
__in DWORD flProtect, //PAGE_READONLY, PAGE_READWRITE
__in DWORD dwMaximumSizeHigh, // 연결할 메모리 최대 크기의 상위 4 바이트, 대용량 파일이 아니면 보통 0
__in DWORD dwMaximumSizeLow, // 메모리 최대 크기의 하위 4 바이트
__in_opt LPCTSTR lpName // 파일 연결 오브젝트의 이름 지정. NULL을 전달 할 수 있음
);
|
*MapViewOfFile() 함수
- 파일과 메모리를 실제로 매핑 시켜주는 함수.
원형
|
LPVOID WINAPI MapViewOfFile(
__in HANDLE hFileMappingObject, // 커널 오브젝트의 핸들
__in DWORD dwDesiredAccess, // 연결된 메모리의 접근권한. CreateFileMapping 함수에대해 종속적이다.?
__in DWORD dwFileOffsetHigh, // 메모리에 연결할 파일의 오프셋을 지정한다.
__in DWORD dwFileOffsetLow, // 오프셋 하위 4 비트
__in SIZE_T dwNumberOfBytesToMap //메모리에 연결할 실제 크기를 바이트 단위로 지정.
);
|
*UmapViewOfFile() 함수
- 매핑된 메모리를 해제.
원형
|
BOOL WINAPI UnmapViewOfFile(
__in LPCVOID lpBaseAddress
);
|
*FlushViewOfFile() 함수
- 메모리에 캐쉬된 데이터를 파일에 저장하게 해주는 함수.
원형
|
BOOL WINAPI FlushViewOfFile(
__in LPCVOID lpBaseAddress, //파일에 저장할 메모리의 시작 주소
__in SIZE_T dwNumberOfBytesToFlush // 파일에 저장할 데이터 크기를 바이트 단위로 지정.
);
|