CreateProcess 다섯번째전달인자 bInheritHandle 을 통해 핸들정보 상속을 결정할 수 있다
부모프로세스의 핸들테이블정보를 자식에게 상속하게 된다
커널 오브젝트를 참조하는 프로세스 개수만큰 UC가 증가한다. 커널오브젝트를 참조하는 프로세스가 되기 위한 조건은 무엇일까?
"프로세스가 핸들을 얻게 되었다는 의미는 핸들 테이블에 해당 핸들에 대한 정보가 추가 되었음을 의미하는 것이다"
CreateMailSlot 호출을 보자.
1.메일슬롯 리소스생성
2.커널 오브젝트 생성
3.핸들 정보가 핸들 테이블에 갱신
4.CreateMailSlot 함수를 빠져 나오면서 핸들값 반환
3번째 단계에서 핸들을 얻은 것이다
위의 그림처럼 부모프로세스의 핸들 테이블에서만 핸들 정보가 등록되어 있어서 UC는 1이다. CloseHandle(핸들인자) 호출하면 해당 커널오브젝트의 UC=0 이되어서 커널 오브젝트와 리소스가 소멸될 것이다.
이제 자식 프로세스 생성하면서 핸들테이블을 상속했다고 가정해보자
상속여부가 Y인 핸들이 상속되었고 일부 커널 오브젝트의 UC가 2가 된것을 알 수 있다.
핸들의 상속 여부는 리소스가 생성되는 순간에 결정된다. 프로그래머에 의해서 결정된다. 메일슬롯의 핸들을 자식 프로세스에게 상속하기 위해서는 SECURITY_ATTRIBUTES 사용하면 된다