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 -----⑩ );
함수 설명 :
새로운 프로세스를 생성한다. 실패시 0값을 리턴한다.
① lpApplicationName :
생성할 프로세스의 실행 파일 이름을 인자로 전달한다. 이때는 문자열을 인자로 입력하여야 한다.
② lpCommandLine :
생성할 프로세스 이름과 해당 프로세스에 인자를 전달 할 때 사용한다. 이를 사용할 때에는
lpApplicationName에 인자를 NULL로 주어야 한다. 이때 실행 파일의 이름은 표준 검색 경로를 기준으로 찾게 된다.
③ lpProcessAttributes :
프로세스 보안 속성을 지정할 때 사용한다. NULL일 경우 디폴트 보안속성이 지정된다..
④ lpThreadAttributes :
쓰래드의 보안 속성을 지정한다. NULL일 경우 디폴트 보안 속성이 지정된다.
⑤ bInheritHandles :
생성되는 자식 프로세스와 부모 프로세스관의 관계를 나타낸다. 이떄 TRUE를 설정하면 자식프로세스는 부모 프로세스가 소유하는 핸들중 일부를 상속한다.
⑥ dwCreationFlags :
생성하는 프로세스의 특성(우선순위)를 결정지을 때 사용되는 옵션이다. 필요 없을시 NULL을 지정할 수 있다.
값 |
의미 |
DEBUG_PROCESS |
호출 프로세스가 디버거 때 사용합니다.자손 프로세스(디버그 대상)로 디버그 이벤트가 일어나면, parent process(디버거)에 통지됩니다. |
DEBUG_ONLY_THIS_PROCESS |
이 플래그가 지정되지 않는 경우, 한편, 호출측 프로세스가 디버그 되고 있는 경우에는, 새로운 프로세스도 또 호출해 옆프로세스의 디버거에 의한 디버그 대상이 됩니다. |
CREATE_SUSPENDED |
새로운 프로세스의 프라이마리스렛드를 중지 상태로 기동합니다.중지 상태의 스렛드를 실행시키려면 ResumeThread 함수를 사용합니다. |
DETACHED_PROCESS |
새로운 캐릭터 베이스의 프로세스가 parent process의 콘솔 윈도우를 이용할 수 없게 합니다.이 플래그를 CREATE_NEW_CONSOLE 플래그와 함께 지정할 수 없습니다. |
CREATE_NEW_CONSOLE |
새로운 프로세스를 위해서 새로운 콘솔 윈도우를 작성합니다.이 플래그를 DETACHED_PROCESS 플래그와 함께 지정할 수 없습니다. |
CREATE_NEW_PROCESS_GROUPE |
새로운 캐릭터 베이스의 프로세스를 새로운 프로세스 그룹의 루트 프로세스로 합니다.프로세스 그룹에는, 루트 프로세스의 모든 자손 프로세스가 포함됩니다.새로운 프로세스 그룹의 프로세스ID(은)는, ppiProcInfo 파라미터로 나타난다 PROCESS_INFORMATION구조체에 돌려주어지는 프로세스ID(와)과 같게 됩니다.프로세스 그룹은, 콘솔 프로세스의 그룹에 [Ctrl]+[Break] 시그널 송신을 가능하게 하기 위해서GenerateConsoleCtrlEvent 함수에 의해서 사용됩니다 이 플래그가 지정되면, 새로운 프로세스 그룹의 모든 그룹에 대한다 [Ctrl]+[C] 시그널이 무효가 됩니다. |
CREATE_UNICODE_ENVIRONMENT |
pvEnvironment 파라미터가 가리키는 환경 블록이 Unicode (을)를 사용하고 있는 것을 나타냅니다. |
CREATE_SEPARATE_WOW_VDM |
이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다.새로운 프로세스를 별개의 가상DOS머신(VDM) 중(안)에서 실행시킵니다.이 플래그를 지정하지 않고 개시된다16비트Windows베이스의 어플리케이션은 모두, 단일의 공유VDM중(안)에서 스렛드로서 실행됩니다. |
CREATE_SHARED_WOW_VDM |
이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다. WIN.INI 의 Windows 섹션(레지스트리의 HKEY_LOCAL_MACHINE\ System\CurrentConsoleSet\Control\WOW 키)에 있다 DefaultSeparateVDM 스윗치가 TRUE (으)로 설정되어 있는 경우에서도, 새로운 프로세스를 공유VDM위에서 실행시키도록(듯이) 합니다. |
CREATE_FORCEDOS |
16비트 OS/2 어플리케이션에 파묻혔다MS-DOS어플리케이션을 강제적으로 실행시킵니다. |
CREATE_BREAKAWAY_FROM_JOB |
어느 작업에 속하고 있는 프로세스로부터 기동되는 child process이 그 작업에 속하지 않게 합니다.호출측 프로세스를 작업에 관련지을 수 있지 않은 경우는, 이 플래그는 효과를 가지지 않습니다.호출측 프로세스를 작업에 관련지을 수 있고 있는 경우는 작업에 JOB_OBJECT_LIMIT_BREAKAWAY_OK 제한이 설정되어 있을 필요가 있습니다. |
CREATE_DEFAULT_ERROR_MODE |
새로운 프로세스에, 호출측 프로세스의 에러 모드를 계승시키지 않습니다.새로운 프로세스에는, 디폴트의 에러 모드를 적용합니다. |
CREATE_NO_WINDOW |
이 플래그는16비트Windows베이스의 어플리케이션을 실행시키는 경우만 유효합니다.콘솔 프로그램을 콘솔 윈도우 없이 실행시킵니다. |
프로세스의 우선도를 설정한다.
피 |
우선도 |
NORMAL_PRIORITY_CLASS |
통상 |
IDLE_PRIORITY_CLASS |
아이돌 |
HIGH_PRIORITY_CLASS |
우선 |
REALTIME_PRIORITY_CLASS |
리얼타임 |
BELOW_NORMAL_PRIORITY_CLASS |
통상 이하 |
ABOVE_NORMAL_PRIORITY_CLASS |
통상 이상 |
⑦ lpEnvironment :
프로세스 마다 Environment Block(환경 블록)이라는 메모리 블록을 관리한다. 이 블록을 통해서 프로세스가 실행에 필요로 하는 문자열을 저장할 수 있다. NULL이 지정되면, 자식 프로세는 부모 프로세스의 환경 블록에 저장되어 있는 문자열을 복사한다.
dwCreationFlags 인자에 CREATE_UNICODE_ENVIRONMENT 플래그가 포함되어 있으면 유니코드 문자열을 저장하고, 아니면 아스키 코드를 저장한다.
⑧ lpCurrentDirectory :
생성하는 프로세스의 현재 디렉토리를 설정하는 인자이다. 전달 인자는 절대 경로로 전달 되어야하며, NULL이 전달될 경우 부모 프로세스의 현재 디렉토리가 새로 생성하는 자식 프로세스의 현재 디렉토리가 된다. 보통은 NULL 사용
⑨ lpStartupInfo :
STARTUPINFO 구조체 변수를 초기화 한 다음에 이 번수의 포인터를 인자로 전달한다. STARTUPINFO 의 구조체는 다음과 같다.
typedef struct _STARTUPINFO { DWORD cb; ------- 구조체 변수의 크기 LPTSTR lpReserved; LPTSTR lpDesktop; LPTSTR lpTitle; ------- 콘솔 윈도우의 타이틀 바 제목 DWORD dwX; ------- 프로세스 윈도우의 x 좌표 DWORD dwY; ------- 프로세스 윈도우의 y 좌표 DWORD dwXSize; ------- 프로세스 윈도우의 가로길이 DWORD dwYSize; ------- 프로세스 윈도우의 세로길이 DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; ------- 설정된 멤버의 정보 WORD wShowWindow; WORD cbReserved2; LPBYTE lpReserved2; HANDLE hStdInput; HANDLE hStdOutput; HANDLE hStdError; } STARTUPINFO, *LPSTARTUPINFO;
형태이다.
⑩ lpProcessInformation :
생성하는 프로세스의 정보를 얻기 위해 사용되는 인자이다. PROCESS_INFORMATION 구조체 변수의 주소값을 인자로 전달한다. 그러면 변수에 프로세스 정보가 체워진다. PROCESS_INFORMATION 구조체의 형태는 다음과 같다.
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; ------ 프로세스 핸들 HANDLE hThread; ------ 쓰래드 핸들 DWORD dwProcessId; ------ 프로세스 ID DWORD dwThreadId; ------ 쓰래드 ID } PROCESS_INFORMATION, *LPPROCESS_INFORMATION;