Windows Driver Model

**Windows Driver Model** (**WDM**) とは、Windows 98とWindows 2000で導入されたデバイスドライバーのフレームワークであり、それ以前のWindowsで使われていたVxDなどを代替するものとして登場した。導入当時は**Win32 Driver Model**と呼ばれていた。

## 概要
WDMドライバーは複雑に階層化されており、 (I/O Request Packet, IRP) を使って相互に通信する。WDMは、各種要求を標準化し書くべきコード量を削減した統一的ドライバーモデルとして、Windows 98とWindows 2000向けに定義された。WDMドライバーは、それ以前のWindows（Windows 95やWindows 3.1、Windows NT 4.0など）では動作しない。WDMに従ったドライバーは、Windows 98 / Windows 98 Second Edition / Windows Me / Windows 2000 / Windows XP / Windows Server 2003 / Windows Vistaが動作するx86ベースのコンピュータでバイナリ互換とソースコード互換を実現する。WDMは前方互換を保つよう設計されている。すなわち、ある版のWDMはそれ以前の版のWDMに従って書かれたドライバーと互換性を有する。そのようなWDMドライバーは新たなOS機能を利用することはできないが、新たなOS上でも動作自体は可能である。逆方向の互換性はない。すなわち、新しい版に従ったドライバーを古いOSで使おうとすると失敗する。例えば、Windows XPのWDMはWindows 2000向けドライバーをロード可能だが、Windows XPの新規機能は使えない。逆にWindows 2000のWDMはWindows XP向けドライバーをロードできない。

WDM仕様に準拠するカーネルモードドライバーはWDMドライバー（）と呼ばれる。

WDMはWindows 2000のカーネルモードドライバーの中間層として存在し、Windows向けドライバー作成に際しての機能を増やし、ドライバーを書きやすくすることを意図していた。WDMはWindows 98とWindows 2000の間でバイナリ互換性およびソースコード互換性を保つよう設計された。WDMドライバーは以下のように分類される。

### ファンクションドライバー
**ファンクションドライバー**は、デバイス用の主要なドライバーである。ファンクションドライバーはデバイスベンダーが作成するのが普通である。1つのドライバーが複数のデバイスを制御することもできる。
; クラスドライバー
: 他のクラスドライバーやミニポートドライバーをその上に構築できる、一種のフレームワークドライバー。WDMアーキテクチャの異なる階層間のインターフェイスを提供する。異なるクラス階層に属するドライバー間の共通機能はクラスドライバーとして書くことができ、それを他のクラスドライバーやミニポートドライバーから利用する。クラスドライバーの最下層側はミニポートドライバーとのインターフェイスを持ち、最上層側はOSとのインターフェイスを持つ。クラスドライバーは必要に応じて、動的にロード / アンロードできる。ハードウェアやバス固有の機能というよりも、クラス固有の機能を持つことが多く、場合によっては単なる列挙 (enumeration) のような機能しか持たないこともある。
; ミニポートドライバー
: USB、サウンドカード、SCSI、ネットワークカードなどに対応したファンクションドライバー。これらはWindowsのバージョン間でバイナリおよびソースコード互換性があり、ハードウェア固有のものだが、ハードウェアへのアクセス制御を固有バスのクラスドライバー経由で行なう。

### バスドライバー
**バスドライバー**は、バスコントローラー、バスアダプター、バスブリッジなどを扱う。マイクロソフトが提供しているバスドライバーとしては、PCI、PnPISA、SCSI、USB、IEEE 1394などがある。各ベンダーは必要に応じて独自のバスドライバーを作成できる。バスドライバーは、同じタイプのバスが複数あれば、それらをまとめて制御できる。

### フィルタードライバー
**フィルタードライバー**はオプション的なドライバーであり、機能を付加したりデバイスの動作を変更したりするドライバーや、デバイスとは関係ないドライバーが属する。フィルタードライバーは同時に複数のサービスを提供できる。上位層のフィルタードライバーは、デバイス用ファンクションドライバーの上位に位置し、下位層のフィルタードライバーはファンクションドライバーとバスドライバーの中間に位置する。
; ドライバーサービス
: カーネルレベルのフィルタードライバーであり、Windowsサービスとして実装され、アプリケーションからデバイスを使えるようにする。

## VxD、WDMとWindows 98
Windows 98系OS (98, 98SE, Me) は、WDMとVxDの両標準をサポートしている。これらは同じハードウェアに対して異なる機能を提供するが、Windows Me登場以降の世代のハードウェアではWDMの方が機能が豊富なものがあった。例えば、TVチューナーカードをVxDドライバーで使うと画像の解像度が384×288ピクセルだったものが、同じカードをWDMドライバーで使うと768×576ピクセルが可能となることがある。これは、WDMの一部であるによる改善である。

しかし、改良された機能を使用するにはハードウェアベンダーの努力が不可欠である。
古いハードウェアではVxDドライバーでは持っていた機能の一部が、WDMドライバーには提供されずに開発が終了されたものも。また、Windows 9x系のWDMは*Ntkern.vxd*という一種のVxDドライバーがNTカーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもあった。

## 批判
Windows Driver Modelは、それ以前のVxDとWindows NTドライバーモデルを大幅に改良したが、以下のような点でドライバー開発者から批判されている。

* WDMは習熟が困難である。
* イベントとプラグアンドプレイの連携が難しい。これは、ドライバーコードにおけるバグのせいでWindowsマシンが正しくスリープあるいは復帰できないといった様々な状況を引き起こす。
* I/Oの取り消しがほぼ不可能である。
* 全てのドライバーに似たような大量のサポートコードを書く必要がある。
* 純粋なユーザーモードドライバーを書くためのサポートが存在しない。

また、マイクロソフトが提供する文書やサンプルについてもいくつかの問題が指摘されている。

このような問題があるため、マイクロソフトはWDMの代替となる新たなフレームワークWindows Driver Foundationをリリースした。これには、Kernel-Mode Driver Framework (KMDF) とUser-Mode Driver Framework (UMDF) が含まれる。Windows VistaはWDMとWindows Driver Foundationの両方をサポートしている。KMDFはWindows XPとWindows 2000向けにダウンロード可能であり、UMDFはWindows XP向けにダウンロード可能となっている。

## ドライバー署名
Windowsドライバーはセキュリティ上の配慮から、正式な作成者を確認することのできるデジタル署名を行なってリリースすることが推奨されている。デジタル署名の手段としては (Windows Hardware Quality Labs) 署名もしくは署名（自己署名）が存在する。Windows Vista以降の32bit版OSでは署名のないドライバーをインストールしようとした際に警告が表示されるものの、インストールおよび動作は可能となる。一方、64bit版OSでは署名のないカーネルモードのドライバーを動作させることはできない。署名のないドライバーをインストールおよび動作できるテストモードも用意されているが、これは開発者向けの内部テスト目的であり、エンドユーザー環境では推奨されない。

Windows 8では、64bit版においてカーネルモードだけでなくユーザーモードのドライバーも署名が必須となった。

Windows 10では2016年1月1日のSHA-1証明書廃止ポリシーを受けて、カーネルモードのドライバーは32bit/64bitにかかわらずマイクロソフト社による署名が必須となることが予定されている。ユーザーモードのドライバーに関しては、Windows 8.1同様にAuthenticode署名が利用可能である。

## 関連項目
* Windows Driver Foundation (WDF)
* Windows Display Driver Model (WDDM)

## 脚注

## 参考文献

* 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.

## 外部リンク
* Windows driver API basics - サウンドカード用ドライバーの基本（WDM、ASIO、MME、DirectXなど）
* Channel 9 Video - マイクロソフトの Device Management and Installation チームへのインタビュー。主にプラグアンドプレイについて
* DirectX 8.1 の新機能 - Broadcast Driver Architectureについて