*유니코드기반의함수

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() 함수

- 힘을 해제시키는 함수

원형

BOOL HeapDestroy(

HANDLE hHeap // 반환하고자 하는 힙의 핸들

);

출처http://dakuo.tistory.com/128

*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 // 파일에 저장할 데이터 크기를 바이트 단위로 지정.

);

[출처] 시스템 함수 정리|작성자 smuoon4680

'Development > C/C++' 카테고리의 다른 글

[Mutex]  (0) 2011.12.01
[CriticalSection]의 사용  (0) 2011.12.01
[Mutex Thread 동기화 예제]  (0) 2011.11.30
[Sleep함수]  (0) 2011.11.29
[thread에서 _beginthreadex의 void *arglist로 스레드에 여러 인수 넘겨주는 방법]  (0) 2011.11.23
Posted by cyj4369
,