WSP30

LJM·2023년 8월 21일
0

컴퓨터지식

목록 보기
31/41

핸들의 상속을 위한 전달인자

CreateProcess 다섯번째전달인자 bInheritHandle 을 통해 핸들정보 상속을 결정할 수 있다

부모프로세스의 핸들테이블정보를 자식에게 상속하게 된다

핸들의 상속과 커널 오브젝트의 UsageCount

커널 오브젝트를 참조하는 프로세스 개수만큰 UC가 증가한다. 커널오브젝트를 참조하는 프로세스가 되기 위한 조건은 무엇일까?
"프로세스가 핸들을 얻게 되었다는 의미는 핸들 테이블에 해당 핸들에 대한 정보가 추가 되었음을 의미하는 것이다"

CreateMailSlot 호출을 보자.
1.메일슬롯 리소스생성
2.커널 오브젝트 생성
3.핸들 정보가 핸들 테이블에 갱신
4.CreateMailSlot 함수를 빠져 나오면서 핸들값 반환

3번째 단계에서 핸들을 얻은 것이다

위의 그림처럼 부모프로세스의 핸들 테이블에서만 핸들 정보가 등록되어 있어서 UC는 1이다. CloseHandle(핸들인자) 호출하면 해당 커널오브젝트의 UC=0 이되어서 커널 오브젝트와 리소스가 소멸될 것이다.

이제 자식 프로세스 생성하면서 핸들테이블을 상속했다고 가정해보자

상속여부가 Y인 핸들이 상속되었고 일부 커널 오브젝트의 UC가 2가 된것을 알 수 있다.

상속이 되기 위한 핸들의 조건

핸들의 상속 여부는 리소스가 생성되는 순간에 결정된다. 프로그래머에 의해서 결정된다. 메일슬롯의 핸들을 자식 프로세스에게 상속하기 위해서는 SECURITY_ATTRIBUTES 사용하면 된다

profile
게임개발자 백엔드개발자

0개의 댓글