본문 바로가기
Programming/윈도우 드라이버

디바이스 오브젝트란?

by 유주원 2013. 1. 4.

OS는 디바이스 오브젝트에 의해서 디바이스들을 나타낸다. 하나 또는 그 이상의 디바이스 오브젝트들은 각각의 디바이스와 관련되어 있다. 디바이스 오브젝트는 디바이스 상의 모든 동작의 타겟 역할을 한다.

 

커널 모드 드라이버들은 다음의 경우를 제외하고 각각의 디바이스를 위해 반드시 적어도 하나 이상의 디바이스 오브젝트를 생성해야 한다.


 - 클래스 혹은 포트 드라이버와 연관되어 있는 미니드라이버들은 그들 자신의 디바이스
    오브젝트들을 생성하지 않는다.

    클래스 혹은 포트 드라이버는 디바이스 오브젝트를 생성하고, 미니드라이버에게 동작을
    디스패치 한다.

 - NDIS 미니포트 드라이버와 같이 드라이버 타입이 명시된 하부시스템의 일부로 동작하는
   드라이버들은 하부시스템에 의해
 그들 디바이스 오브젝트가 생성된다.

 

만약 드라이버가 자신의 디바이스 오브젝트를 생성한다면 디바이스 타입을 결정하기 위해 문서를 참조해야 한다.

 

디바이스들은 보통 다중 디바이스 오브젝트에 의해 표현된다. 디바이스 오브젝트는 디바이스 스택으로 구성된다. 디바이스 상에서 동작이 수행될때마다, 시스템은 디바이스 스택의 탑 디바이스 오브젝트에게 IRP 데이터 구조체를 전송한다. 

각각의 드라이버들은 IRP를 처리하거나 디바이스 스택의 다음 하위 드라이버로 IRP를 전달한다.

 

디바이스 오브젝트는 오브젝트 매니저에 의해 관리되는 DEVICE_OBJECT 구조체로 표현된다. 오브젝트 매니저는 다른 시스템 오브젝트에 대한 디바이스 오브젝트에 대해서도 동일한 기능을 제공한다. 특히, 디바이스 오브젝트는 이름 지어질 수 있고, 이름지어진 디바이스 오브젝트는 open 처리를 할 수 있다.

 

시스템은 각각의 디바이스 오브젝트를 위해 저장소를 제공하며, 디바이스 extension이라고 불리어 진다. 디바이스 extension은 시스템에 의해 생성되고 해제될 수 있다.