{{위키데이터 속성 추적}}
'''윈도우 드라이버 모델''' (Windows Driver Model, WDM)은 [[컴퓨팅]]에서 [[윈도우 95]], [[윈도우 3.1]], 윈도우 NT 드라이버 모델과 같은 오래된 버전의 윈도우에서 쓰였던 [[VxD]]를 대체하기 위해 만들어진 것으로, [[윈도우 95]], [[윈도우 2000]]에 도입된 [[장치 드라이버]]를 위한 프레임워크이다. '''Win32 드라이버 모델'''로도 알려져 있다.

== 개요 ==
WDM 드라이버는 복잡한 계층으로 되어 있고 [[입출력 요청 패킷]] (IRP)을 통해 서로 통신한다. 마이크로소프트 윈도우 드라이버 모델은 기록되어야 하는 코드의 양을 줄이고 요구 사항을 표준화함으로써 윈도우 98과 윈도우 2000 운영 체제를 위한 통합 드라이버 모델을 정의하였다. WDM 드라이버는 윈도우 98, 윈도우 2000 이전의 운영 체제, 다시 말해 윈도우 95, 윈도우 NT 4.0, 윈도우 3.1 등에서는 동작하지 않는다. WDM을 따르게 되면 [[x86]] 기반의 컴퓨터에서 윈도우 98, 윈도우 98 SE, [[윈도우 미]], 윈도우 2000, [[윈도우 XP]], [[윈도우 서버 2003]], [[윈도우 비스타]] (하위 호환성을 위함)에 걸쳐 [[이진 코드|이진 코드 호환성]]과 소스 호환성을 보장한다. WDM은 [[상위 호환성]]을 전제로 만들어졌으므로 WDM 드라이버는 드라이버가 처음 만들어진 시기보다 더 새로 나온 윈도우의 버전에서도 동작할 수 있지만 새로운 버전의 운영 체제에 도입된 새로운 기능의 이점을 얻을 수 없다는 것을 뜻하기도 한다. WDM은 일반적으로 [[하위 호환성]]은 제공되지 않는다. 다시 말해 WDM 드라이버는 더 오래된 버전의 윈도우에서 동작하는 것을 보장하지는 않는다. 이를테면 [[윈도우 XP]]는 [[윈도우 2000]]용으로 작성된 드라이버를 사용할 수 있으나 윈도우 XP에 도입된 어느 새로운 WDM 기능도 이용할 수는 없다. 그러나 윈도우 XP용으로 쓰여진 드라이버는 윈도우 2000에서 사용할 수 있을 수도 있고 그렇지 않을 수도 있다.

WDM은 윈도우 2000 [[링 보호|커널 모드]] 드라이버들의 중재 계층에 존재하며 윈도우의 드라이버 기록을 쉽게 하고 기능을 증가시킬 목적으로 도입되었다. WDM이 [[윈도우 98]] 계열부터 윈도우 2000 계열에 이르기까지 주로 [[이진 코드|이진 코드 호환성]]과 소스 호환성을 보장하기 위해 설계되었지만 이것이 반드시 선호된다는 것을 뜻하는 것은 아니며 특정한 드라이버는 그 둘 중 하나의 운영 체제에 맞추어서 개발될 수 있음을 말해 준다. WDM 드라이버는 다음과 같은 종류로 나뉜다.
=== 장치 기능 드라이버 ===
'''기능 드라이버'''는 장치를 위한 주된 드라이버이다. 기능 드라이버는 일반적으로 장치 제조업체가 만들어내며 (드라이버가 원본 모드로 쓰이는 것이 아니라면) 필수적이다. 기능 드라이버는 하나 이상의 장치를 도와줄 수 있다.
* [[클래스 드라이버]]: 기능 드라이버의 일종으로, [[미니포트]]와 기타 [[클래스 드라이버]]를 맨 위층에서 만들어질 수 있는 내장 프레임워크 드라이버로 생각할 수 있다. 클래스 드라이버는 서로 다른 수준의 WDM 아키텍처 사이에서 상호 작용한다. 다른 드라이버 클래스 사이의 공통 기능은 클래스 드라이버 안에다 기록할 수 있으며 다른 클래스와 미니포트 드라이버가 이를 사용한다. 낮은 수준의 클래스 드라이버는 미니포트 드라이버에 노출된 저만의 인터페이스를 가지고 있지만 높은 수준의 클래스 드라이버는 운영 체제에 따른다. 클래스 드라이버는 원하는 대로 동적으로 로드하거나 언로드할 수 있다. 이들은 하드웨어나 [[버스 (컴퓨팅)|버스]]에 따르지 않는 클래스 고유 기능으로, 실제로 열거(Enumeration)와 같이 클래스 고유 기능만 다루는 경우도 있다.
* [[미니포트 드라이버]]: [[범용 직렬 버스|USB]], [[오디오]], [[SCSI]], [[네트워크 어댑터]]를 위한 기능 드라이버이다. 이들은 일반적으로 윈도우 98에서 윈도우 2000에 이르기까지의 소스 호환성과 이진 호환성을 보장하지만 특정한 버스 [[클래스 드라이버]]를 통해 하드웨어로의 접근을 제어한다.

=== 버스 드라이버 ===
'''[[버스 (컴퓨팅)|버스]] 드라이버'''는 버스 컨트롤러, 어댑터, 브리지를 도와 준다. 마이크로소프트는 [[PCI 버스|PCI]], [[플러그 앤 플레이|PnPISA]], [[SCSI]], [[범용 직렬 버스|USB]], [[IEEE1394]]와 같은 가장 일반적인 버스를 위한 버스 드라이버를 제공한다. 각 소프트웨어 제조업체는 필요하다면 저만의 버스 드라이버를 만들 수 있다. 버스 드라이버는 컴퓨터에 같은 종류의, 하나 이상의 버스가 일을 경우 하나 이상의 버스를 도와 줄 수 있다.
=== 필터 드라이버 ===
[[필터 드라이버]]는 선택적인 드라이버로서, 장치의 동작에 값을 더하거나 수정하는 역할을 하며 비장치 드라이버의 역할을 할 수도 있다. 필터 드라이버는 하나 이상의 장치를 도와 줄 수 있다. 상위 수준의 필터 드라이버는 기능 드라이버를 위한 기본 드라이버 위에 놓일 수 있지만 하위 수준의 필터 드라이버는 기능 드라이버 아래와 버스 드라이버 위에 놓일 수 있다.
* [[윈도우 서비스|장치 서비스]]: 이것은 [[윈도우 서비스]]로 추가된, 커널 수준의 필터 드라이버의 일종이며 응용 프로그램들이 장치와 함께 동작할 수 있게 도와 준다.

== VxD, WDM, 그리고 윈도우 98 ==
[[윈도우 98]] 기반 운영 체제([[윈도우 98]], 윈도우 98 SE, [[윈도우 미]])는 WDM와 [[VxD]] 드라이버 표준을 둘 다 사용할 수 있다. 이 드라이버들은 둘 다 같은 하드웨어에 통일되고도 각기 다른 기능을 제공할 수 있다. 그러나 일반적으로 더 새로운 WDM 표준은 더 많은 기능을 제공한다. 이를테면 [[VxD]] 드라이버를 사용하는 [[TV 수신 카드]]는 384 x 288 화소의 해상도로 영상을 캡처할 수 있지만 같은 TV 수신 카드에 WDM 드라이버를 사용하게 되면 768 x 576 화소의 해상도로 캡처할 수 있다. 이는 WDM의 일부인 새로운 [[브로드캐스트 드라이버 아키텍처]] (BDA)의 도움을 받은 것에 기인한다.

== 비판 ==
윈도우 드라이버 모델은 드라이버 소프트웨어 개발자로부터 비평을 받아왔으며 다음과 같은 사항이 주를 이룬다[https://web.archive.org/web/20091021174351/http://www.wd-3.com/archive/FrameworkIntro.htm]:
* WDM은 매우 가파른 학습 곡선이 있다.
* [[전원 관리]] 이벤트와 [[플러그 앤 플레이]]의 상호 작용이 쉽지 않다.
* 입출력 취소가 거의 불가능하다.
* 지원 코드의 수천 개의 라인이 드라이버마다 요구된다.
* 순수 [[보호 링|사용자 모드]] 드라이버 기록을 지원하지 않는다.

마이크로소프트사가 제공한 문서의 품질과 샘플에 대한 수많은 문제도 거론되었다.

이러한 문제로 마이크로소프트는 WDM을 대체할 새로운 프레임워크인 [[윈도우 드라이버 파운데이션]](WDF)을 공개하였다. 여기에는 [[커널 모드 드라이버 파운데이션]] (KMDF)와 [[사용자 모드 드라이버 파운데이션]] (UMDF)를 포함하고 있다. [[윈도우 비스타]] 이상의 운영 체제에서는 WDM과 더 새로운 [[윈도우 드라이버 파운데이션]]을 둘 다 제공하고 있다. KMDF는 윈도우 2000/XP용으로도 제공되지만 UMDF는 윈도우 XP에서만 사용할 수 있다.

== 참조 ==
* Finnel, Lynn (2000년). ''MCSE Exam 70-215, Microsoft Windows 2000 Server''. [[Microsoft Press]]. {{ISBN|1-57231-903-8}}.
* Oney, Walter (2003년). ''Programming the Windows Driver Model'', [[Microsoft Press]], {{ISBN|0-7356-1803-8}}.

== 같이 보기 ==
* [[윈도우 드라이버 파운데이션]]
* [[커널 모드 드라이버 프레임워크]]
* [[사용자 모드 드라이버 프레임워크]]

== 외부 링크 ==
* [http://www.staudio.de/kb/english/drivers/ 윈도우 드라이버 API의 기본] - 이 문서는 WDM, [[ASIO]], [[MME]], DirectX와 같은 사운드카드 드라이버에 숨겨진 기본 정보를 제공한다.
* [http://channel9.msdn.com/Showpost.aspx?postid=156316 Channel 9 Video] - 주로 [[플러그 앤 플레이]]를 아우르는 마이크로소프트의 장치 관리, 설치 인터뷰.

{{마이크로소프트 API}}

[[분류:장치 드라이버]]
[[분류:마이크로소프트 API]]