1. 핸들 테이블

- 커널 오브젝트와 핸들 사이에 핸들 테이블이 존재한다. 이로서 핸들을 참조하여 특정 커널 오브젝트를 가리킬 수 있다.


2. 핸들과 핸들 테이블

- 핸들 테이블은 프로세스 별로 독립적이다. 그리고 숫자가 핸들로서 의미를 지니기 위해서는 해당 숫자가 핸들 테이블에 등록되어야 한다. 등록되는 순간부터 핸들이라 할 수 있으며, 이 핸들을 통해서 커널 오브젝트에 접근하는 것이 가능하다.


3. 핸들의 상속

- 핸들은 자식프로세스를 생성하는 과정에서 상속 할 수 있다. 핸들이 자식 프로세스에서 상속된다는 말은 부모 프로세스의 핸들 테이블 정보가 자식 프로세스의 핸들 테이블에 복사된다는 뜻이다.


4. 가짜 핸들(Pseudo 핸들)

- GetCurrentProcess 함수 호출을 통해서 얻은 핸들을 가리켜 가짜 핸들이라 한다. 이는 핸들 테이블에 등록된 핸들값이 아닌, 자기 자신의 프로세스를 가리키기 위한 약속된 상수이기 때문이다. 핸들 테이블에 등록된 핸들을 얻기 위해서는 DuplicateHandle 함수를 사용해야 한다.


5. 파이프

- 이름없는 파이프(Anonymous Pipe) : 주소 정보가 없기 때문에 서로 관계있는(부모 자식 관계, 혹은 부모의 자식들 간의 관계)프로세스 끼리 사용 가능하다. 핸들 값을 통해서 단방향 통신을 한다.


- 이름있는 파이프(named Pipe) : 메일슬롯과 유사하다. 다만 브로드캐스트 방식을 지원하지 않고, 양방향 통신을 지원한다.


+ Recent posts