부모 프로세스 A 핸들 테이블 | 자식 프로세스 B 핸들 테이블 | 운영체제 |
핸들 3 -> 프로세스 A 의 커널오브젝트 | 핸들 3 -> 프로세스 B 의 커널 오브젝트 | 프로세스 A 커널 오브젝트 (UC 2) |
핸들 7 -> 프로세스 B 의 커널 오브젝트 | 프로세스 B 커널 오브젝트 (UC 2) | |
핸들 4 -> 파일 커널 오브젝트 | 파일 커널 오브젝트 (UC 1) |
UC -> usage count.
프로세스 A 커널 오브젝트 UC 2 ( 프로세스 A 를 실행한 파일탐색기, 자기자신 )
프로세스 B 커널 오브젝트 UC 2 ( 부모프로세스, 자기 자신 )
파일 커널 오브젝트 UC 1 ( 프로세스 B )
핸들 값 ( 테이블 )은 프로세스에 종속적이다.
프로세스 B 가 종료되면, UC 가 감소할 뿐이지, 커널 오브젝트가 감소하는 것은 아니다.
UC 가 1이 될 뿐이다. 하지만 파일 커널 오브젝트의 UC 는 0이되어 소멸 된다.
( 물리적으로 파일이 사라지는 것은 아니다 )
GetCurrentProcess 함수는 자기 자신을 가리키는 상수값을 리턴한다.
CloseHandle( HANDLE hObject );
핸들테이블에 핸들정보 삭제, UC 감소
CreateProcess 함수를 호출하고 정보를 반환받기위해 넘겨준
PROCESS_INFORMATION 구조체변수의 멤버인 hProcess 를 넘겨주면 된다. (pi.hProcess)
프로세스 B가 종료되어도, 부모프로세스의 핸들테이블에는 남아있고, UC 가 0으로 감소하지 않아서 커널오브젝트가 소멸되지 않는데, 종료코드를 확인하고 핸들을 반환하기위해 사용한다.