LISTORY
[윈도우즈 시스템 프로그래밍] 커널 오브젝트와 핸들의 종속관계(2) 본문
뇌를 자극하는 윈도우즈 시스템 프로그래밍 YouTube 강의 내용 정리이다.
이번 강의는 저번 강의에 이어 계속 커널 오브젝트와 핸들의 종속 관계에 대해 정리하겠다.
YouTube 강의 커널 오브젝트와 핸들의 종속관계(2)
커널 오브젝트와 핸들의 종속관계
앞의 강의를 들으며 두가지 궁금점이 생길 수 있다.
1. 프로세스 A를 생성했을 때 자기 자신에 대한 정보도 정말 핸들테이블에 정리되는가?
2. 프로세스 A와 프로세스 B가 프로세스 B의 커널 오브젝트를 가리키고 있을 때, 프로세스 B가 죽어도 프로세스 A가 B의 커널 오브젝트를 참조하기 때문에 커널 오브젝트는 소멸되지 않는다. 근데 프로세스 A가 이미 죽은 프로세스 B의 커널 오브젝트를 참조하는게 무슨 의미?
이 두가지 의문에 대해 설명하겠다.
프로세스 A가 B를 생성하면 프로세스 A는 부모 프로세스가 된다.
이럴 경우, 자식의 상태에 따라 부모 프로세스의 상태가 변할 수도 있다.
예를 들어 자식 프로세스가 정상적인 종료를 할 때, 1을 RETURN 비 정상적인 종료를 할 때 -1을 RETURN 한다고 해보자
그럼 이 리턴 값(종료 코드)은 실제로 프로세스 B의 커널 오브젝트로 들어간다.
프로세스 B가 종료되자마자 커널 오브젝트가 소멸되면 프로세스 A는 B가 제대로 종료되었는지 아닌지 알 수 없게 되는 것이다.
이런 것을 확인할 수 있도록 하기 위해 커널 오브젝트를 바로 지워버리지 않는다.
프로세스 A가 생성이 되면 프로세스 A는 자기 자신에 대한 커널 오브젝트에 접근이 가능하다.
그럼 프로세스 A의 핸들 테이블에 자기 자신에 대한 커널 오브젝트 핸들 값을 등록할까? 실제로는 그렇지 않다.
프로세스는 자기 자신에 대한 핸들 값을 GetCurrentProcess() 함수를 통해 가져올 수 있다.
GetCurrentProcess()는 임의의 핸들 값을 하나 리턴한다. 그 값은 프로세스 A, B, C 누가 호출하던지 간에 고유의 상수값으로써 리턴이 된다.
이 값은 자기 자신을 의미한다. 즉, 핸들 테이블에 등록되어 있는 핸들 값이 아닌, 자기 자신을 의미하는 것으로써 윈도우즈 계열에서 약속되어 있는 상수값이 리턴되는 것이다.
그러므로 UC가 처음에 2가 될때, 두군데의 핸들 테이블에 등록되었다는 뜻이 아니라, 하나는 나 자신을 의미한다.
'IT > 윈도우 프로그래밍' 카테고리의 다른 글
[윈도우즈 시스템 프로그래밍] Signaled vs Non-Signaled (0) | 2018.06.17 |
---|---|
[윈도우 시스템즈 프로그래밍] 프로세스간 통신(IPC) (0) | 2018.06.17 |
[윈도우즈 시스템 프로그래밍] 커널 오브젝트와 핸들의 종속관계(1) (0) | 2018.06.10 |
[윈도우 시스템즈 프로그]커널 오브젝트에 대한 이해 (0) | 2018.06.10 |
[윈도우즈 시스템 프로그래밍] 프로그래밍을 통한 프로세스의 생성 (0) | 2018.06.02 |