프로세스를 실행시키는 방법은 아래와 같다

1. 바탕화면에 있는 아이콘을 실행

2. 프로그래밍을 통해 프로세스 실행(부모-자식 프로세스)


위의 2가지는 사실 똑같은 방법이다.

- 바탕화면도 프로세스이다.

- 더블클릭 이벤트가 발생하면 바탕화면(부모) 프로세스가 클릭된 프로세스(자식)을 실행시킨다.


프로세스 생성 함수

BOOL CreateProcess(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

BOOL bInheritHandles,

DWORD dwCreationFlags,

LPVOID lpEnviroment,

LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo,

LPPROCESS_INFORMATION lpProcessInformation

);


첫 2가지와 마지막 2가지가 중요하다.

- LPCTSTR lpApplicationName : 실행 파일 이름


- LPTSTR lpCommandLine : 매개변수 (실행 파일 이름까지도 여기에 표현가능)


- LPSTARTUPINFO lpStartupInfo : 생성하려는 프로세스의 정보(전달 목적)


- LPPROCESS_INFORMATION lpProcessInformation : 생성된 프로세스의 정보(제공받기 위한 목적)



LPSTARTUPINFO 구조체


typedef struct _STARTUPINFO {

DWORD     cb;                 // 구조체 변수의 크기

LPTSTR       lpReserved;

LPTSTR       lpDesttop;

LPTSTR       lpTitle;            // 콘솔 윈도우의 타이틀 바 제목

DWORD     dwX;              // 프로세스 윈도우의 x 좌표

DWORD     dwY;              // 프로세스 윈도우의 y 좌표

DWORD     dwXSize;        // 프로세스 윈도우의 가로 길이

DWORD     dwYSize;        // 프로세스 윈도우의 세로 길이

DWORD     dwXCountChars;

DWORD     dwYCountChars;

DWORD     dwFillAttribute;

DWORD     dwFillAttribute;

DWORD     dwFlags;           // 설정된 멤버의 정보

WORD       wShowWindow;

WORD       cbReserved2;

LPBYTE       lpReserved2;

HANDLE     hStdInput;

HANDLE     hStdOutput;

HANDLE     hStdError;

} STARTUPINFO, *LPSTARTUPINFO; 


cb로 구조체의 크기를 전달하는 이유

- CreateProcess 함수의 9번째 전달인자가 다른것도 올 수 있게 하도록 라이브러리를 개편하는 경우 구별하기 위해서 전달한다.



LPPROCESS_INFORMATION 구조체는 지금 알필요 없다.


typedef struct _PROCESS_INFORMATION

{

HANDLE    hProcess;            //프로세스의 핸들

HANDLE    hThread;            // 쓰레드 핸들

DWORD    dwProcessId;        //프로세스 ID

DWORD    dwThreadId;        //쓰레드 ID

}PROCESS_INFOMATION




표준 검색경로

- 파일을 오픈할때 경로를 명시해주지 않으면 다음과 같은 순서로 실행파일을 찾는다.


1. 실행중인 프로세스의 실행파일이 존재하는 디렉터리

2. 실행중인 프로세스의 현재 디렉터리(Current Directory)

3. Windows의 시스템 디렉터리(System Directoy)

4. Windows의 디렉터리(Windows Directory)

5. 환경변수 PATH에 의해 지정되어 있는 디렉터리



+ Recent posts