본문 바로가기

Programming/Windows&C#

(64)
[Windows/WinAPI] Thread 생성 _beginthreadex사용 (실습7) 1주만에 정리해서 올린다..... 그것도 그냥 한걸로..... 첫번째 예제는 간단하게 쓰래드 하나를 만들어서 구구단을 출력하는 예제이다. 먼저 해더파일 선언이다. 머 다른건 없지만 process.h 가 추가 되었다. 이 해더파일에 사용할 쓰래드와 프로세스 작업에 쓰이는 함수의 정의와 매크로가 포함되어 있다.다음은 MyThread 함수다. 이름과 같이 쓰래드로 사용 할 것이며 인자가 int* 형으로 있다. 기본은 void* 형이지만 이거에 대해서는 따로 다른글에서 정리하겠다. 이 인자를 이용하여 구구단이 몇단인지를 전달 해 줄 것이다. 다음으로 Main이다. 여기서 9개의 핸들을 배열로 만들어 사용한다. ( 이는 WaitForMultipleObjucts를 유용하게 쓸 수 있게 해준다.)Main에서 가장 중..
[Windows/WinAPI] GetCurrentProcess, GetCurrentProcessId, ResumeThread, WaitForSingleObject HANDLE WINAPI GetCurrentProcess(void); 함수 설명 :넘겨주는 인자는 없으며 현재 실행중인 프로세스의 핸들을 반환값으로 넘겨둔다. DWORD WINAPI GetCurrentProcessId(void); 함수 설명 : 넘겨주는 인자는 없으며 형재 실행중인 프로세스 ID를 반환값으로 넘겨준다. DWORD WINAPI ResumeThread( _In_ HANDLE hThread ----- 쓰래드 핸들 ); 함수 설명 :쓰레드 대기 계수 값을 감소 시킨다. 만약 대기 값이 0이 되면, 대기중이던 쓰래드가 실행이 된다. DWORD WINAPI WaitForSingleObject( _In_ HANDLE hHandle, -----① _In_ DWORD dwMilliseconds -----..
[Windows/WinAPI] 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 ..
[Windows/WinAPI] LoadLibrary, GetProcAddress, FreeLibrary HMODULE WINAPI LoadLibrary( _In_ LPCTSTR lpFileName ------① ); 함수 설명 : 필요한 DLL을 프로세스 가상 메모리에 매핑하는 기능을 제공한다. 그리고 GetProceAddress 함수를 통해서 필요한 함수 포인터를 획득할 수 있다. 함수 성공시 DLL 모듈 핸들을 반환한다. ① lpFileName : 프로세스 주소 공간으로 매필시킬 DLL이름을 지정한다. 절대경로로 지정하여도 되고 그렇지 않다면 표준 검색 경로를 기준으로 지정된 이름의 파일을 찾는다. ※ 표준 검색 경로 순서 1. 실행파일이 존재하는 디렉터리2. 프로세스의 현재 디렉터리3. Windows 시스템 디렉터리4. Windows 디렉터리5. PATH 환경변수에 등록되어 있는 모든 디렉터리 FAR..
[Windows/WinAPI] __declspec(dllimport), __declspec(dllexport) 선언문 : __declspec(dllimport), __declspec(dllexport) 외부에 제공할, 혹은 외부로부터 제공받을 함수 밑 변수 선언에 사용한다. 이는 이는 C언어나 C++에서 제공하는게 아닌 마이크로소프트에서 제공하는 추가적인 선언문이다. __declspec(dllimport)DLL로 부터 제공받을(Import) 함수를 선언할 때 사용된다. __declspec(dllexport) 외부에 제공할(export) 함수를 선언할 때 사용된다. 함수에 이 선언부를 사용하면 외부에서 사용할 수 있는 형태의 DLL로 라이브러리화 하겠다는 뜻이다. *DLL을 만들떄에는 함수 앞에 export선언을 해주어야한다.
[Windows/WinAPI] CreateFileMapping, MapViewOfFile, UnmapViewOfFile HANDLE WINAPI CreateFileMapping( _In_ HANDLE hFile, -----① _In_opt_ LPSECURITY_ATTRIBUTES lpAttributes, -----② _In_ DWORD flProtect, -----③ _In_ DWORD dwMaximumSizeHigh, -----④ _In_ DWORD dwMaximumSizeLow, -----⑤ _In_opt_ LPCTSTR lpName -----⑥ ); 함수 설명 : 이 함수를 사용을 할려면 먼저 파일에 대한 핸들이 있어야 한다. 파일을 맵핑하는 것이기 때문에 당연한것이라 생각 하면된다. 함수 성공시 파일 연결 오브젝트 핸들을 반환한다. 그리고 이 핸들을 MapViewOfFile 함수를 사용하여 실제 메모리에 맵핑을 한..
[Windows/WinAPI] RegSetValueEx, RegCloseKey, RegDeleteValue, RegQueryValueEx LONG WINAPI RegSetValueEx( _In_ HKEY hKey, ------① _In_opt_ LPCTSTR lpValueName, ------② _Reserved_ DWORD Reserved, ------③ _In_ DWORD dwType, ------④ _In_ const BYTE *lpData, ------⑤ _In_ DWORD cbData ------⑥ ); 함수 설명 : 열려있는 레지스크리 키(hKey)를 이용하여 lpValueName에 명시된 항목 이름의 데이터 형식이나 내용을 설정하는데 사용하는 함수이다. 성공시 ERROR_SUCCESS를 반환한다. ① hKey : 현재 열어서 사용하고 있는 레지스트리 키에 대한 핸들을 명시하거나 미리 정의된 값을중 하나를 명시한다.(RegCre..
[Windows/WinAPI] CreateProcess, GetStartupInfo, GetStdHandle, WaitForSingleObject, ResumeThread(실습6) 이것저것 하다보니 늦게 정리했다.... 결국 올려준 실습도 아직 못 했고.... 일단 수업때 했던 실습예제부터 정리해본다... 구구단을 출력 하는 예제이다.CreateProcess를 이용하여 출력한다. 먼저 구구단을 출력할 프로세스를 만든다. 딱히 별 다른 설명이 필요없다. 2번째 인자로 몇단인지 String으로 받고 13번째 줄이서 이를 정수 값으로 바꾸어 주었다. 그리고 간단하게 GetCurrentProcess를 이용하여 해당 프로세스의 ID값을 읽고 해당 프로세스에서 구구단을 출력한다. 다음은 프로세를 호출하는 프로세스를 만든다. 전체 코드이다... (몇줄 안된다...) 먼저 선언부분이다. 5번 라인에서 보면 앞에서 만든 프로세스 이름이다. 그리고 17번과 19번 라인에서 정보를 받을것이라 명시하고..