본문 바로가기

프로그래밍/MFC , 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         lpStartupInfo,
  _Out_       LPPROCESS_INFORMATION lpProcessInformation
);

 

윈도우는 프로세스 생성을 돕기 위해 CreateProcess 함수를 제공합니다.  이 함수를 호출하는 프로세스를 가리켜 보무 프로세스 라 하고 함수 호출에 의해 생성된 프로세스를 카리켜 자식 프로세스라합니다.

 

1.lpApplicationName

  생성할 프로세스의 실행파일 이름을 인자로 전달.. 경로명을 추가로 지정 할 수 있으며, 경로명을 지정

  하지 않을 경우 프로그램의 현재 디렉터리에서 실행파일을 찾게 된다.

2.lpCommandLine

  생성하는 프로세스에 인자를 전달할때 사용된다. 첫 번째 매개변수에 NULL을 전달한 경우, 실행파일의

  이름을 더불어 전달 할 수도 있다. 이런 경우 실행파일의 이름은 표준 검색경로를 기준으로 찾게된다.

  내부적으로 문자열에 변경을 가한다. 따라서 전달인자의 문자열은 변수 형태여야한다.

3.lpProcessAttributes

  프로세스의 보안 속성을 지정할때 사용한다. NULL을 전달할경우 기본보안속성이 적용된다.

4.lpThreadAttributes

  쓰레도의 보안 속성이다. NULL인경우 기본보안 속성이다.

5.bInheritHandles

  전달 인자가 TRUE 인경우 생성되는 자식프로세스는 부모 프로세스가 소유한 핸들 중 일부(상속가능한

  핸들)를 상속한다.

6.dwCreationFlags

  생성하는 프로세스의 특성(우선 순위)를 결정지을때 사용되는 옵션입니다. 특별히 설정할 필요가 없을

  경우 0을 전달합니다.

7.lpEnvironment

  프로세스마다 ENvironment Block(환경블록)이라는 메모리 블록을 관리한다. 이 블록을 통해서 프로세

  스가 실행에 필요호 하는 문자열을 저장할 수있다. 이 전달 인자를 통해서 생성하는 프로세스의

  Environment Block을 지정한다. NULL이 전달되면 자식 프로세스는 부모 프로세스의 환경 블록에 저장

  되어 있는 문자열을 복사하게 된다.

8.lpCurrentDirectory

  생성하는 프로세스의 현재 디렉터리를 설정하는 인자이다. 전달인자는 디렉터리 정보를 포함하는 완전

  경로 형태로 구성되어야 하며 NULL이 전달될 경우 부모 프로세스의 현재 디렉터리가 새로 생성하는

  자식 프로세스의 현재 디렉터리가 된다. 역시 NULL이 일반적으로 전달된다.

9.lpStartupInfo

  STARTUPINFO 구조체 변수를 초기화한 다음 이 변수의 포인터를 인자로 전달한다 STARTUPINFO 구조

  체 변수는 생성하는 프로세스의 속성을 지정할 때 사용된다.

10.lpProcessInformation

  생성하는 프로세스 정보를 얻기 위해 사용되는 인자이다. PROCESS_INFORMATION 구조체 변수의 주

  소값을 진자로 전달한다. 그러면 전달된 주소값이 가리키는 변수에 프로세스 정보가 채워진다.