Windows , IIS

객체구조 – 객체 메소드

SungWookKang 2015. 7. 16. 19:09
반응형

객체구조 – 객체 메소드

  • Windows Server 2008

 

객체 유형이 사용되는 방법에 따라 어떤 객체 유형은 메소드를 명시하는 반면 메소드를 명시하지 않는 객체 유형도 있다.

 

익스큐티브 구성 요소가 새로운 객체 유형을 생성할 때 하나 이상의 메소드를 객체 관리자에 등록할 수 있다. 이후부터 객체 관리자는 메소드가 등록된 유형의 객체 수명 동안에 잘 정의된 시점(일반적으로 객체가 생성될 때나 어떤 식으로든지 변경될 때)에 메소드를 호출 한다.

 

다음 표는 객체 메소드와 호출 시점에 대한 내용이다.

메소드

메소드가 호출되는 시점

Open

객체 핸들이 오픈 될 때

Close

객체 핸들이 닫힐 때

Delete

객체 관리자가 객체를 삭제하기 전

Query Name

스레드가 보조(secondary)객체 이름 공간에 존재하는 객체(예를 들어 파일)의 이름을 요청할 때

Parse

객체 관리자가 보조 객체 이름 공간에 존재하는 객체 이름을 찾을 때

Dump

사용 안 함

Okay to close

객체 관리자가 핸들을 닫게 지시를 받을 때

Security

프로세스가 보조 객체 이름 공간에 존재하는 객체의 보호 속성을 읽거나 변경할 때

 

이들 객체의 메소드는 일반적인 동작이다. 이 일반화적인 루틴을 완전히 범용화 하기 위해서는 객체 관리자의 설계자가 모든 객체 유형을 예상 해야만 한다. 하지만 객체 유형을 생성하는 루틴은 커널에 의해 익스포트되어 서드파티 구성 요소도 자신만의 객체 유형을 생성할 수 있다.

 

객체 관리자는 객체 핸들을 생성할 때마다 open 메소드를 호출한다. 즉 객체가 생성되거나 오픈될 때 호출 한다.

 

Close 메소드를 사용하는 예는 I/O 시스템을 들 수 있다. I/O 관리자가 파일 객체 유형에 대해 Close 메소드를 등록하면 객체 관리자는 파일 객체 핸들을 닫을 때마다 close 메소드를 호출한다. 이때 파일 핸들을 닫는 프로세스가 파일에 사용중인 락을 소유하고 있는지 검사하고 락을 제거한다. 파일 락을 검사하는 작업은 객체 관리자가 직접 할 수 없다.

 

객체 관리자는 delete 메소드가 등록되어 있다면 메모리에서 임시 객체를 삭제하기 전에 호출 한다. 메모리 관리자는 자신이 섹션을 위해 할당한 내부 데이터 구조체가 해당 섹션 객체가 삭제되기 전에 해제되는지 검증한다. 객체 관리자는 메모리 관리자의 내부 동작에 관해 알지 못하기 때문에 이 작업을 할 수 없다.

 

Parse 메소드는 객체 관리자로 하여금 자신의 이름 공간 외부에 존재하는 객체를 찾는다면 객체 찾기에 대한 제어를 보조 객체 관리자로 넘기게 한다. 이는 Query name 메소드도 유사하다. 객체 관리자는 객체 이름을 찾을 때 그 경로에서 관련 Parse 메소드를 갖는 객체를 만나면 탐색을 중지한다.

 

I/O 시스템 역시 사용하는 Security 메소드는 Parse 메소드와 유사하다. 스레드가 파일을 보호하는 보안 정보를 쿼리하거나 변경하고자 할 때마다 Security메소드가 호출 된다.

 

Okay-to-close 메소드는 시스템 용도로 사용되는 핸들을 악의적(부정확한)닫기로부터 보호하는 추가적인 계층으로 사용 된다. 표준적인 보안 모델하에서 프로세스는 자신의 객체에 대해 완전한 제어권을 가지므로 이들 스레드는 자신의 데스크톱에 대한 핸들을 닫을 수 있다.

 

 

[참고자료]

Windows Internals

 

반응형