일반 드라이버 쌍 모델로서의 KMDF
KMDF as a generic driver pair model(원본 Microsoft Learn 링크)
아래는 위 문서의 번역이다.
이 글은 Kernel-Mode Driver Framework(KMDF)를 일반적인 드라이버 페어 모델로 볼 수 있다는 아이디어를 설명한다.
이 주제를 읽기 전에 미니드라이버와 드라이버 쌍에 대해 제시된 아이디어를 이해하고 있어야 한다.
여러 해에 걸쳐 Microsoft는 이 패러다임을 사용하는 여러 기술 특화 드라이버 모델을 만들었다.
- 드라이버는 두 부분으로 나뉜다. 하나는 일반적인 처리를 담당하고, 다른 하나는 특정 디바이스에 특화된 처리를 담당한다.
- 일반 부분은 Framework라 불리며 Microsoft에서 작성한다.
- 특정 부분은 KMDF 드라이버라 하며 Microsoft 또는 독립 하드웨어 공급업체가 작성할 수 있다.

드라이버 페어의 Framework 부분은 다양한 종류의 드라이버에 공통적인 일반 작업을 수행한다. 예를 들어, Framework는 I/O 요청 큐, 스레드 동기화, 전원 관리 업무의 상당 부분을 처리할 수 있다.
Framework는 KMDF 드라이버의 디스패치 테이블을 소유하므로, 누군가가 I/O 요청 패킷(IRP)을 (KMDF 드라이버, Framework) 페어에 보낼 때 IRP는 Framework로 전달된다. Framework가 IRP를 자체적으로 처리할 수 있으면 KMDF 드라이버는 관여하지 않는다. Framework가 IRP를 자체적으로 처리할 수 없으면 KMDF 드라이버가 구현한 이벤트 핸들러를 호출하여 도움을 받는다. 다음은 KMDF 드라이버가 구현할 수 있는 이벤트 핸들러의 예이다.
- EvtDevicePrepareHardware
- EvtIoRead
- EvtIoDeviceControl
- EvtInterruptIsr
- EvtInterruptDpc
- EvtDevicePnpStateChange
예를 들어, USB 2.0 호스트 컨트롤러 드라이버는 usbehci.sys라는 특정 부분과 usbport.sys라는 일반 부분을 가진다. USB 2.0 미니포트 드라이버라고 불리는 usbehci.sys는 USB 2.0 호스트 컨트롤러에 특화된 코드를 가지고 있다. USB 포트 드라이버라고 불리는 usbport.sys는 USB 2.0과 USB 1.0 모두에 적용되는 일반 코드를 가지고 있다. (usbehci.sys, usbport.sys) 드라이버 페어는 USB 2.0 호스트 컨트롤러를 위한 단일 WDM 드라이버를 구성한다.
(특정, 일반) 드라이버 페어는 다양한 디바이스 기술에서 다양한 이름을 가진다. 대부분의 디바이스별 드라이버는 mini 접두사를 가지고 있다. 일반 드라이버는 종종 port 또는 class 드라이버라고 불린다. 다음은 (특정, 일반) 페어의 예이다.
- (display miniport driver, display port driver)
- (USB miniport driver, USB port driver)
- (battery miniclass driver, battery class driver)
- (HID minidriver, HID class driver)
- (storage miniport driver, storage port driver)
더 많은 드라이버 페어 모델이 개발됨에 따라, 모든 서로 다른 방식의 드라이버 작성 방법을 관리하기가 어려워졌다. 각 모델은 디바이스별 드라이버와 일반 드라이버 간 통신을 위한 자체 인터페이스를 가지고 있다. 한 디바이스 기술(예: Audio)을 위한 드라이버 개발에 필요한 지식은 다른 디바이스 기술(예: Storage)을 위한 드라이버 개발에 필요한 지식과 상당히 다를 수 있다.
시간이 지나면서, 커널 모드 드라이버 페어를 위한 단일 통합 모델이 필요하다는 인식이 생겼다. Windows Vista에서 처음 제공된 Kernel Mode Driver Framework(KMDF)는 이 요구를 충족한다. KMDF 기반 드라이버는 많은 기술별 드라이버 페어 모델과 유사한 패러다임을 사용한다.
- 드라이버는 두 부분으로 나뉜다. 하나는 일반 처리를 담당하고, 하나는 특정 디바이스에 특화된 처리를 담당한다.
- 일반 부분은 Microsoft에서 작성하며 Framework라고 한다.
- 특정 부분은 Microsoft 또는 독립 하드웨어 제조업체가 작성하며 KMDF 드라이버라고 한다.
USB 3.0 호스트 컨트롤러 드라이버는 KMDF 기반 드라이버의 예이다. 이 예에서는 페어의 두 드라이버 모두 Microsoft에서 작성한다. 일반 드라이버는 Framework이고, 디바이스별 드라이버는 USB 3.0 호스트 컨트롤러 드라이버이다. 아래 그림은 USB 3.0 호스트 컨트롤러의 디바이스 노드와 디바이스 스택을 보여준다.

그림에서 Usbxhci.sys는 USB 3.0 호스트 컨트롤러 드라이버이다. 이것은 Framework인 Wdf01000.sys와 페어를 이룬다. (usbxhci.sys, wdf01000.sys) 페어는 USB 3.0 호스트 컨트롤러를 위한 기능 드라이버로 동작하는 단일 WDM 드라이버를 형성한다. 드라이버 페어는 디바이스 스택에서 하나의 레벨을 차지하며 단일 디바이스 객체로 표현된다는 점에 주목한다. (usbxhci.sys, wdf01000.sys) 페어를 나타내는 단일 디바이스 객체는 USB 3.0 호스트 컨트롤러의 기능 디바이스 객체(FDO)이다.
(KMDF 드라이버, Framework) 페어에서 Framework는 다양한 커널 모드 드라이버에 공통적인 작업을 처리한다. 예를 들어, Framework는 I/O 요청 큐 처리, 스레드 동기화, 대부분의 PnP 작업, 그리고 대부분의 전원 관리 작업을 처리할 수 있다. KMDF 드라이버는 특정 디바이스와 상호작용이 필요한 작업을 처리한다. KMDF 드라이버는 Framework가 필요할 때 호출하는 이벤트 핸들러를 등록함으로써 요청 처리에 참여한다.
댓글남기기