CreateProcess 함수의 이해
부모 프로세스(Parent Process) : CreateProcess함수를 호출하는 프로세스
자식 프로세스(Child Process) : CreateProcess함수 호출에 의해 생성된 프로세스
lpApplicationName | 생성할 프로세스의 실행파일 이름 |
lpCommandLine | 생성할 프로세스의 매개변수 (lpApplicaionName에 NULL을 주고, 여기에 이름을 넣어도 됨) |
lpProcessAttributes | 프로세스 보안 속성 지정 (NULL : default) |
lpThreadAttributes | 쓰레드 보안 속성 지정 (NULL : default) |
bInheritHandles | TRUE : 생성되는 자식 프로세스는 부모 프로세스가 소유하는 handle을 상속 가능 (T/F) |
dwCreationFlags | 생성하는 프로세스의 특성(특히 우선순위)를 결정지을 때 사용 (0 : default) |
lpEnvironment | 생성하는 프로세스의 Environment block을 지정 (NULL : 부모 block 복사) |
lpCurrentDirectory | 생성하는 프로세스의 현재 디렉터리를 설정 (NULL : default) |
lpStartupInfo | 생성하는 프로세스의 속성을 지정하기 위해 사용 (STARTUPINFO 구조체 변수 주소값) |
lpProcessInfromation | 생성하는 프로세스 정보를 얻기 위해 사용(PROCESS_INFORMATION 구조체 변수 주소값) |
프로세스 생성 1 단계 : STARTUPINFO 구조체 변수의 생성 및 초기화
STARTUPINFO 구조체 : 생성하는 프로세스의 속성을 지정하는 용도로 사용된다.
STARTUPINFO 구초제 변수를 선언과 동시에 0으로 초기화 해야 한다.
cb | 구조체 변수의 크기 |
lpTitle | 콘솔 윈도우의 타이틀 바 제목 |
dwX | 프로세스 윈도우의 x좌표 |
dwY | 프로세스 윈도우의 y자표 |
dwXsize | 프로세스 윈도우의 가로 길이 |
dwYsize | 프로세스 윈도우의 세로 길이 |
dwFlags | 설정된 멤버의 정보 (STARTF_USEPOSITION : dwX, dwY 사용, STARTF_USESIZE : dwXsize, dwYsize 사용) |
※ dwFlags에 STARTF_USEPOSITION, STARTF_USZESIZE가 설정되지 않으면 아무리 dwX,Y dwX,Ysize가 설정되었다해도 사용할 수 없다.
프로세스 생성 2 단계 : 현재 디렉터리의 설정
Windows는 "현재 디렉터리"라는 개념을 제공한다. 만약에 완전경로를 전달하지 않고 파일을 생성 및 개방할 경우 현재 디렉터리 기준으로 작업이 이루어진다.
현재 디렉터리를 확인하는 함수 GetCurrentDirectory()
nBufferLength | 현재 디렉터리 정보가 저장될 메모리 버퍼의 크기 |
lpBuffer | 현재 디렉터리 정보가 저장될 메모리 버퍼의 포인터 |
프로세스의 현재 디렉터리 변경 함수 SetCurrentDirectory()
lpPathName | 변경하고자 하는 현재 디렉터리 경로명 |
프로세스 생성 3 단계 : CreateProcess 함수의 호출
CreateProcess 함수는 내부적으로 문자열에 변경을 가한다. 따라서 전달인자의 문자열은 변수 형태여야 한다.
EX) CreateProcess( NULL, _T("A.exe 10 20"), ...) 불가능 // CreateProcess(NULL, command, .....) 가능 (command = 변수)
첫 번째 전달인자를 통해서 실행파일 이름을 전달할 경우 : 현재 디렉터리를 기준으로 실행파일을 찾음
두 번째 전달인자를 통해서 실행파일 이름을 전달할 경우 : 표준 검색경로 순서대로 실행파일을 찾음
1 표준 검색 경로 : 실행 중인 프로세스의 실행파일이 존재하는 디렉터리
2 표준 검색 경로 : 실행 중인 프로세스의 현재 디렉터리
3 표준 검색 경로 : Windows의 시스템 디렉터리 (GetSystemDirectory)
4 표준 검색 경로 : Windows 디렉터리 (GetWindowsDirectory)
5 표준 검색 경로 : 환경변수 PATH에 의해 지정되어 있는 디렉터리
여섯 번째 전달인자 dwCreationFlags는 프로세스 특성을 결정지을 때 사용된다.
-> CREATE_NEW_CONSOLE을 전달하면 새롭게 생성하는 프로세스를 위한 콘솔 윈도우가 독립적으로 생성된다.
이것만은 알고 갑시다
1. 프로세스에 대한 이해
실행 중에 있는 프로그램을 가리킨다.
2. 프로세스의 상태
Ready 상태 , Running 상태 Blocked 상태
3. 컨텍스트 스위칭
실행 중인 프로세스가 변경될 때 레지스터와 메모리 사이에 데이터 교환
4. 프로세스를 생성하는 방법
CreateProcess 익숙해 지기
06.2 커널 오브젝트와 핸들의 종속 관계 (0) | 2020.04.05 |
---|---|
06.1 커널 오브젝트에 대한 이해 (0) | 2020.04.05 |
05.2 프로세스의 스케줄링과 상태 변화, 컨텍스트 스위칭 (0) | 2020.04.05 |
05.1 프로세스(Process)의 이해 (0) | 2020.04.05 |
00. RISC vs CISC (0) | 2020.03.18 |
댓글 영역