프로그래밍을 통한 프로세스의 생성
프로세스 생성 함수
BOOL CreateProcess(
LPCTSTR lpApplicationName , //실행파일 이름 지정
LPTSTR lpCommandLine , /*매개변수 전달 (실행파일이름과 매개변수
정보를 묶어서 하나로 이곳에 표현 가능)*/
LPSECURITY_ATTRIBUTES lpProcessAttributes ,
LPSECURITY_ATTRIBUTES lpTreadAttributes ,
BOOL binheritHandles ,
DWORD dwCreationFlags ,
LPVOID lpEnvironment ,
LPCTSTR lpCurrentDirectory ,
LPSTARTUPINFO lpstrartupInfo ,
LPPROCESS_INFORMATION lpProcessInformation
);
LPSTARTUPINFO |
정보전달 → |
CreateProess |
정보반환 → |
LPPROCESS_INFORMATION |
※CreateProcess함수를 호출하기 위해서는
LPSTARTUPINFO, LPPROCESS_INFORMATION 구조체를 선언해야한다.
LPSTARTUPINFO
이구조체를 통하여 생성하고자하는 프로세스 특성정보를 설정하여 CreateProcess에 인자로 전달한다.
LPPROCESS_INFORMATION
CreateProcess함수가 생성된 프로세스정보를 LPPROCESS_INFORMATION 에 반환한다.
LPSTARTUPINFO
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 dwFileAttribute;
DWORD dwFlags; //설정된 멤버의 정보
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput;
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
LPPROCESS_INFORMATION
typedef struct _PROCESS_INFORMATION
{
HANDLE hProcess; //프로세스의 핸들
HANDLE hThread; //쓰레드 핸들
DWORD dwprocessId; //프로세스의 ID
DWORD dwThreadId; //쓰레드ID
} PROCESS_INFORMATION;
DWORD cb; 를 보면 구조체의 크기인데 왜 구조체가 정해져잇는데 구조체의 크기를 인자로 전달하는 걸까?
CreateProcess 함수를 보면 9번째 인자는 LPSTARTUPINFO로 확정되어있다.
그런데 나중에 다른인자를 올수있게 라이브러리를 개편한다면 전과의 호환성을 위해 구조체를 구별 할 수있게 전달하는 것이다.
예제 5-1]
AdderProcess 자식프로세스 단순덧셈프로세스
CreateProcess 부모프로세스 AdderProcess를 실행시키는 예제이다.
표준 검색경로
1 실행중인 프로세스의 실행파일이 존재하는 디렉터리
2 실행중인 프로세스의 현재 디렉터리(Current Directory)
3 Windows의 시스템디렉터리 (System Directory)
4 Windows 디렉터리 (Windows Directory)
5 환경변수 PATH에 의해 지정되어 있는 디렉터리
실행결과
'강좌 정리 > 뇌를자극하는윈도우즈시스템프로그래밍' 카테고리의 다른 글
06장. 커널 오브젝트와 오브젝트 핸들 ②커널 오브젝트와 핸들의 종속관계 (0) | 2012.07.09 |
---|---|
06장. 커널 오브젝트와 오브젝트 핸들 ① 커널 오브젝트에 대한 이해 (0) | 2012.07.05 |
05장. 프로세스의 생성과 소멸 ① 프로세스와 스케줄러의 이해 (0) | 2012.07.03 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ③ Direct 모드와 Indirect 모드 (0) | 2012.07.02 |
04.장 컴퓨터 구조에 대한 두번째 이야기 ②LOAD & STORE 명령어 디자인 (0) | 2012.07.02 |