예제를 통한 CreateProcess 함수의 이해
AdderProcess.cpp
Program Description: A program that adds arguments to the main function
*/
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR* argv[])
{
DWORD val1, val2;
val1 = _ttoi(argv[1]);
val2 = _ttoi(argv[2]);
_tprintf(_T("%d + %d = %d \n"), val1, val2, val1 + val2);
+
_gettchar(); //return 0 to temporarily pause the execution of the program;
return 0;
}
위에서 만든 프로그램을 바로가기를 통해서 인자를 전달해서 실행하였고 출력된 결과이다.
다음 예제는 위에서 제시한 프로그램을 실행시키기 위한 프로그램이다
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#define DIR_LEN MAX_PATH+1
int _tmain(int argc, TCHAR* argv[])
{
STARTUPINFO si = { 0, };
PROCESS_INFORMATION pi;
si.cb = sizeof(si);
si.dwFlags = STARTF_USEPOSITION | STARTF_USESIZE;
si.dwX = 100;
si.dwY = 200;
si.dwXSize = 300;
si.dwYSize = 200;
wchar_t title[] = L"I am a boy!";
si.lpTitle = title;
TCHAR command[] = _T("adder.exe 10 20");
TCHAR cDir[DIR_LEN];
BOOL state;
GetCurrentDirectory(DIR_LEN, cDir);
_fputts(cDir, stdout);
_fputts(_T("\n"), stdout);
SetCurrentDirectory(_T("C:\\WinSystem"));
GetCurrentDirectory(DIR_LEN, cDir);
_fputts(cDir, stdout);
_fputts(_T("\n"), stdout);
state = CreateProcess(
NULL,
command,
NULL, NULL, TRUE,
CREATE_NEW_CONSOLE,
NULL, NULL, &si, &pi);
if (state != 0)
_fputts(_T("Creation OK! \n"), stdout);
else
_fputts(_T("Creation Error! \n"), stdout);
return 0;
}
실행파일이름: CreateProcess.exe
코드 실행결과이다
코드를 보면 adder.exe를 프로세스로 생성하고 자기자신은 종료되고 있다
프로세스생성1단계: STARTUPINFO 구조체변수생성및초기화
프로세스생성2단계: 현재디렉터리설정
현재 디렉터리는 특정 파일을 찾을 경우에 기본이 되는 디렉터리이다
파일이름만 API함수에 인자로 전달할 경우 현재디렉터리를 기준으로 파일을 찾게된다
일반적으로 프로세스가 생성되면 프로세스의 현재 디렉터리는 프로세스의 실행파일이 존재하는 디렉터리로 설정된다