시작 전 소개

뇌를 자극하는 윈도우즈 프로그래밍
1챕터 정리본 바로가기
2챕터 정리본 바로가기
3챕터 정리본 바로가기
4챕터 세션1 정리본
4챕터 세션 2 정리본
5챕터 세션 1-2-3 정리본
5챕터 세션 4-5 정리본
6챕터 세션1

커널 오브젝트와 핸들의 종속 관계

커널 오브젝트와 OS

커널 오브젝트는 Windows 운영체제에 종속적이다
과연 왜 그럴까? 여기에서 눈여겨 보아야할 것은 종속의 주체가 프로세스가 아닌 Windows라는 것이다.
◼이유1:생성 및 관리가 windwos운영체제 의하여 이루어진다.
그림으로 보는 커널 오브젝트
위 그림을 보면 알 수 있듯 커널 오브젝트의 생성과 소멸 시점을 관리하는 것은 Windows이기 때문에 커널 오브젝트는 운영체제에게 종속적인 것이다.
◼이유2:커널 오브젝트가 여러 프로세스에 의한 접근이 가능하다고 해서(함수를 통한 간접 호출) 종속적인 것은 아니다.
위 호출은 시스템 호출에 의해서 이루어진다.
책에서는 도서 대여점에서 책을 빌린다고 해서 고객에게 책이 귀속되는 것은 아니라는 예제를 통해 설명하고 있다.

핸들의 종속 관계

핸들은 운영체제에 종속적이지 않고 프로세스에 종속적이다
짐작해보자면, 핸들은 커널 오브젝트에 할당되는 숫자인데 이 핸들의 소멸시점이 프로세스에 달려있기 때문일 것이다.
자세한 이유와 설명은 8장에서 나온다고 하니 8장 공부 이후 이 글에 링크를 추가하도록 하겠다.

커널 오브젝트 공유 예제

A프로세스가 B프로세스의 우선순위를 변경시킨다는 것은, A가 B프로세스에 접근하는 것이 가능하다는 의미를 가지고 있다.
따라서 하나의 커널 오브젝트에 둘 이상의 프로세스가 접근하는 것도 가능하다는 걸 알 수 있다.

SetPrioriyClass

MSDN설명
멤버로는 프로세스에 대한 핸들 정보(책에서는 pi.hprocess라는 멤버-변수로 접근),우선순위 정보가 들어간다.
PROCESS_INFORMATION구조체
즉 프로세스 핸들 정보를 통해서 커널 오브젝트에게 우선순위 정보를 전달중이라는 것을 알 수 있다.

PROCESS_INFORMATION

위에 링크를 보면, 프로세스 핸들과 프로세스에 대한 식별값을 따로 정의하는 모습을 볼 수 있다.
아까 분명 핸들은 커널 오브젝트에 할당되는 숫자라고 명시하였는데, 이 핸들을 굳이 또 ID값으로 식별 가능하게 정의해야하는 이유는 무엇일까?
간단하게 설멍하면 하나의 프로세스가 여러 개의 핸들을 가질 수도 있기 때문이다.
하나의 프로세스의 여러개의 핸들이 있는 경우 고유성을 가진 무언가로 내가 필요로하는 핸들을 나타내주어야하고 그 역할을 하는 것이 바로 dwProcessId인 것이다.
프로세스 핸들은 프로세스의 커널 오브젝트를 구분짓기 위한 것이고, 프로세스 ID는 프로세스 자체를 구분짓기 위하여 필요하다

댓글남기기