LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
MSDN 참고 주소 : http://msdn.microsoft.com/en-us/library/ms682425.aspx (닷넷 기준이라 조금 모양이 다릅니다.)
자식 프로세스를 생성한다. 이때 이 함수를 호출한 프로세스는 부모 프로세스(Parent Process), 함수 호출로 생성된 프로세스를 자식 프로세스(Child Process)라고 한다.
LPCTSTR lpApplicationName : 생성할 프로세스의 실행파일 이름.
LPTSTR lpCommandLine : 생성할 프로세스의 파라미터 문자열
LPSECURITY_ATTRIBUTES lpProcessAttributes : 프로세스의 보안 속성
LPSECURITY_ATTRIBUTES lpThreadAttributes : 스레드를 전달할 경우 보안 속성
BOOL bInheritHandles : 자식프로세스의 부모 프로세스의 핸들 소유 여부
DWORD dwCreationFlags : 생성하는 프로세스의 프로세스 특성
LPVOID lpEnvironment : 프로세스가 실행헤 필요한 문자열 저장. Enviroment Block 지정
LPCTSTR lpCurrentDirectory : 자식 프로세스의 현재 디렉터리 설정
LPSTARTUPINFO lpStartupInfo : 자식 프로세스의 속성이 담긴 구조체의 주소값
LPPROCESS_INFORMATION lpProcessInformation : 자식 프로세스의 정보를 저장할 구조체 주소값
그리고 다음은 LPSTARTUPINFO의 구조이다.
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
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;
특별히 중요한 요소가 있다기보다는 이런게 있다라는 전체적인 것을 아는 것이 좋다. 자세한 것은 MSDN(http://msdn.microsoft.com/en-us/library/ms686331(VS.85).aspx) 을 참조하자.
다음은 LPPROCESS_INFORMATION 의 구조이다.
typedef struct _PROCESS_INFORMATION {자세한 사항은 좀 더 공부를 해 보아야겠다.
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId; } PROCESS_INFORMATION,
*LPPROCESS_INFORMATION;
그리고 주의해야 할 점이 유니코드 기반에서 함수 실행 시 lpCommandLine인자에 바로 _T("abc.exe")형식으로 문자열을 넣으면 런타임에러가 난다. 함수 내부적으로 문자열에 변화를 가하기 때문이라고 한다. 그러므로 넘길때는 반드시 따로 문자열 변수를 만들어 넘기자.