Computer/OS

CreateProcess 함수

이재만박사 2016. 10. 13. 15:30

WinAPI 에서 프로세스를 생성하는 기본 함수 - CreateProcess( )


WinExec 등의 함수도 내부적으로는 이 함수를 호출하여 프로세스를 생성


BOOL CreateProcess( LPCTSTR lpApplicationName, 

                         LPTSTR lpCommandLine,

                         LPSECURITY_ATTRIBUTES lpProcessAttributes,

                         LPSECURITY_ATTRIBUTES lpThreadAttributes,

                         BOOL bInheritHandles,

                         DWORD dwCreateionFlags,

                         LPVOID lpEnvironment,

                         LPCTSTR lpCurrentDirectory,

                         LPSTARTUPINFO lpStartupInfo,

                         LPPROCESS_INFORMATION lpProcessInformation );


10 개나 인자를 가지고 있지만 이 중에 반드시 필요한 인자는 4개 뿐이며 나머지는 모두 NULL로 줄 수 있다


4개의 인수를 살펴보자


1. lpApplicationName


실행하고자 하는 프로그램의 이름 지정

절대 경로를 주거나 파일명만 지정할 수도 있는데 파일명만 지정한 경우는 현재 디렉토리에서 파일을 찾음

검색 경로는 사용하지 않음

이 인자를 NULL로 주고 두 번째 인자에 실행 파일명을 지정할 수도 있음


2. lpCommandLine


명령행 인자를 지정

첫 번째 인자가 NULL일 경우 실행 파일 명을 가질 수도 있음

실행 파일 명과 명령행 인자를 동시에 지정하는 것도 가능


3. lpStartupInfo


새로 만든 프로세스의 메인 윈도우가 어떻게 초기화될지를 지정하는 구조체

이 구조체의 cb 멤버에는 구조체의 크기가 반드시 대입되어야 함

구조체에 특별한 옵션을 주지 않는 한 구조체의 모든 멤버는 0으로 초기화


4. lpProcessInformation


새로 만든 프로세스의 메인 윈도우가 어떻게 초기화될지를 지정하는 구조체이며 생략할 수 없음

출력용 인수이므로 초기화 할 필요는 없고 구조체 변수를 선언한 후 주소만 전달