위 그림에서 핸들테이블이 추가되었다. 프로세스로 전달되는 핸들 정보가 어떻게 전달 및 저장되는지를 구체적으로 보여주고 있다. 핸들테이블은 핸들 정보를 저장하고 있는 테이블로서 프로세스별로 독립적이다. CreateProcesss 함수나 CreateMailSlot 함수호출을 통해서 리소스 생성을 요구한 결과로 핸들 정보를 얻게 될 경우, 프로세스 자신에게 속해 있는 핸들 테이블에 해당 정보가 등록된다.
핸들 테이블은 커널 오브젝트에 직접 저장되지 않습니다. 핸들 테이블은 프로세스의 주소 공간 내에 있으며, 각 핸들이 실제 커널 오브젝트를 참조합니다.
프로세스는 핸들 테이블을 통해 커널 오브젝트에 접근합니다. 핸들은 실제로는 커널 오브젝트에 대한 참조나 포인터와 같은 역할을 합니다. 프로세스는 이 핸들을 사용하여 커널 오브젝트를 조작하거나 정보를 얻을 수 있습니다.
CreateProcess 함수 호출하면 새로운 자식 프로세스가 생성된다. 자식 프로세스의 핸들테이블도 더불어 생성된다.부모프로세스의 핸들 테이블과 자식 프로세스의 핸들 테이블 사이에는 어떠한 관계가 있을까? CreateProcess 함수 호출시 전달되는 인자가 무엇이냐에 따라 부모 프로세스 핸들 테이블에 등록되어 있는 핸들 정보는 새롭게 생성되는 자식 프로세스에게 상속될 수 있다
자식 프로세스는 부모 프로세스의 핸들 테이블에 등록되어 있는 핸들 정보를 상속받을 수 있다. 하지만 모든 핸들 정보를 상속받는것은 아니다. 다음 그림을 보자.
핸들테이블에는 상속여부를 결정하는 컬럼이 존재한다
자식프로세스의 핸들 테이블을 보자 상속여부에 대한 정보도 변경 없이 그대로 상속된다. 자식프로세스가 새로운 자식프로세스를 생성하는 경우에도 이 핸들에 대한 정보는 계속해서 상속된다
상속의 기준은 어디서 나뉘는 걸까? 리소스를 생성하는 함수의 전달인자를 통해서 프로그래머가 결정할 수 있는 요소이다.