커널 오브젝트란?

"커널에 의해 할당된 간단한 메모리 블록"

매우 간단하게 설명하자면 위와 같은 설명이 가능합니다. 하지만 너무 추상적이고 간단한 설명인거 같습니다. 좀더 커널 오브젝트에 대한 설명을 시작해 볼까요?





커널 오브젝트는 주로 Create*류 함수로 생성됩니다. 해당 Create*류 함수를 호출하면 각 커널 오브젝트를 구분하기 위한 "핸들" 값을 반환해 줍니다.

위 스크린샷에 있는 커널 오브젝트는 커널에 의해 할당된 간단한 메모리 블록 입니다. 해당 멤모리 블록들은 커널에 의해서만 접근 가능한 구조체로 구성되어 있으며, 커널 오브젝트에 대한 세부 정보들을 저장하고 있습니다.

커널에 의해서만 접근 가능한 데이터 구조체 이기에 해당 데이터 블록은(커널 오브젝트) 애플리케이션(사용자 단)에서 데이터 구조체가 저장되어 있는 메모리 위치를 직접 접근하여 그 내용을 변경하는 것은 불가능하다 -> 애플리케이션(사용자 단)에서 메모리 직접 접근으로 데이터 변경이 불가능 하다고 데이터 구조체를 구성하는 데이터들을 참조 하거나 변경하는 행위 자체가 불가능 하단 뜻은 아님!

마이크로소프트는 정제된 방법을 통해 구조체의 내용에 접근할 수 있도록 일련의 함수 집합을 제공하고 있어서 이를 통해 커널 오브젝트의 내부적인 값에 접근 및 수정할 수 있습니다. -> Ex)Open*류 함수들, Set*류 함수들


모든 오브젝트 타입에 공통적으로 존재하는 값들

  • 사용자 카운터
커널 오브젝트는 프로세스가 아니라 커널에 의해 소유됩니다.
굳이 이말을 지금 당장 이해하려 하지 않아도 괜찮습니다! 그림으로 살짝 풀어서 설명해보겠습니다.


이 말을 다시 풀어서 설명해보자면...  그림 2와 같이 Create*류 함수를 통해 커널 오브젝트가 생성 됐습니다. 하지만 이 커널 오브젝트는 자신을 생성한 프로세스(Process A) 가 삭제 된다고 해서 무조건 삭제되는게 아닙니다.

  • 보안 디스크립터 


댓글