객체와 핸들

 - 원도우 커널은 객체 관리자에 의해서 객체가 관리됨

 - 커널 관련 객체만 관리(섹션, 파일, 디바이스 드라이버, 동기화 객체, 프로세스, 쓰레드 등)

 - 모든 객체는 단순희 nonpaged pool 커널 메모리에 저장된 데이터 구조체임

 - 객체는 해당 객체의 표준 객체 헤더만 알고 있음

 

핸들

- App는 객체 데이터 구조체에 직접 접근 못함 → 핸들을 이용해 객체 접근

 - 프로세스 안에서 객체를 구별하기 위한 숫자로 이뤄진 구분자

 - 핸들 값은 프로세스 핸들 테이블에서의 해당 객체에 대한 인덱스 값

 

[객체와 프로세스 핸들 테이블]

 

○ 액세스 마스크(Access Mask) : 두개의 16bit 액세스 플래그 워드로 구성(32bit)된 정수

- 상위워드 : GENERIC_WORD, GENERIC_WRITE와 같은 일반적인 액세스 플래그를 포함

 - 하위워드 : PROCESS_TERMINATE(핸들을 이용해서 프로세스를 종료시킬 수 있음)

             KEY_ENUMERATE_SUB_KEYS 플래그(레지스트리 키 안의 하위 키들을 열거)

 

○ 커널은 모든 객체에 대해 두개의 레퍼런스 카운트를 관리함

  - 커널 레퍼런스 카운트(kernel reference count)

  - 핸들 카운트(handle counter)
위의 두개 카운트 모두 0일 때 삭제됨

 


+ Recent posts