'Fido'에 해당되는 글 1건

  1. 2009.09.07 Device Stack와 Driver loading 순서

지난 번에 설명한 바 있지만 device driver에는 여러 종류가 있습니다. 이를 크게 분류하면 다음과 같습니다.

  • Bus driver - 특정 bus에 attach된 device들을 enumeration 하고 이를 관리
  • Function driver - 특정 device의 동작에 대한 기능을 제공
  • Filter driver – Bus 또는 Function driver의 상/하위에 위치하여 기능을 확장하거나 동작을 모니터링 하는 데 사용

그리고 각 device에 대해서 운영체제는 DEVICE_OBJECT라는 구조체 형태로 이를 관리합니다. driver의 type에 따라서 다음과 같이 각각 다른 device object로 이를 표현합니다.

  • PDO – Physical Device Object.  Bus driver가 사용하는 device object
  • FDO – Function Device Object. Function driver가 사용하는 device object
  • FiDO – Filter Device Object. Filter driver가 사용하는 device object

예를 들어 device 들은 다음과 같은 layer를 구성하여 존재하게 됩니다.

FiDO   FiDO   FiDO
  ↑        ↑        ↑
FDO    FDO    FDO
  ↑        ↑        ↑
FiDO   FiDO   FiDO
  ↑        ↑        ↑
PDO    PDO    PDO
     ↑     ↑     ↑
          FiDO
            ↑
          FDO
            ↑
          FiDO
            ↑
          PDO

그렇다면 이렇게 layer를 구성하는 device driver들은 어떠한 순서로 loading이 될까요? 여기서 driver의 loading이란 가상 메모리에 drvier file의 image가 맵핑 되는 것을 의미합니다. 이는 시스템에 의해서 각 driver의 AddDevice가 호출되는 순서와 관련이 있습니다. 시스템이 AddService를 호출하는 순서는 다음과 같습니다.

Device Lower Filters

–> Class lower filters

–> Function drivers

–> Device Upper Filters

–> Class Upper Filters

각 AddDevice 함수들은 DEVICE_OBJECT 구조체를 만들고 해당 PDO의 root stack에 링크 시킵니다. 즉, 실제 메모리에 로딩되는 순서보다는 AddDevice가 호출되면서 PDO 내에 stack에 링크되는 순서에 의해서 device stack이 구성되도록 구현되어 있습니다.

'Programming' 카테고리의 다른 글

DriverEntry 함수  (0) 2009.09.11
Virtual PC를 이용한 Kernel debugging  (0) 2009.09.09
PnP device의 인식 과정  (0) 2009.09.07
Wow64 - Registry Redirection  (0) 2009.09.01
Wow64에 대해서  (0) 2009.09.01
Posted by noenemy
,