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はWindows 2000のカーネルモードドライバの中間層として存在し、Windows向けドライバ作成に際しての機能を増やし、ドライバを書きやすくすることを意図していた。WDMはWindows 98とWindows 2000の間でバイナリおよびソース互換性を保つよう設計された。WDMドライバは以下のように分類される。
ファンクションドライバ
ファンクションドライバは、デバイス用の主要なドライバである。ファンクションドライバはデバイスベンダーが作成するのが普通である。1つのドライバが複数のデバイスを制御することもできる。
- クラスドライバ
- 他のクラスドライバやミニポートドライバをその上に構築できる、一種のフレームワークドライバ。WDMアーキテクチャの異なる階層間のインタフェースを提供する。異なるクラス階層に属するドライバ間の共通機能はクラスドライバとして書くことができ、それを他のクラスドライバやミニポートドライバから利用する。クラスドライバの最下層側はミニポートドライバとのインタフェースを持ち、最上層側はOSとのインタフェースを持つ。クラスドライバは必要に応じて、動的にロード / アンロードできる。ハードウェアやバス固有の機能というよりも、クラス固有の機能を持つことが多く、場合によっては単なる数え上げのような機能しか持たないこともある。
- ミニポートドライバ
- USB、サウンドカード、SCSI、ネットワークカードなどに対応したファンクションドライバ。Windowsのバージョン間で(バイナリ、ソース)互換性があり、ハードウェア固有の制御をバスドライバ経由で行う。
バスドライバ
バスドライバは、バスコントローラ、バスアダプタ、バスブリッジなどを扱う。マイクロソフトが提供しているバスドライバとしては、PCI、PnPISA、SCSI、USB、IEEE 1394などがある。各ベンダーは必要に応じて独自のバスドライバを作成できる。バスドライバは、同じタイプのバスが複数あれば、それらをまとめて制御できる。
フィルタドライバ
フィルタドライバはオプション的なドライバであり、機能を付加したりデバイスの動作を変更したりするドライバや、デバイスとは関係ないドライバが属する。フィルタドライバは同時に複数のサービスを提供できる。上位層のフィルタドライバは、デバイス用ファンクションドライバの上位に位置し、下位層のフィルタドライバはファンクションドライバとバスドライバの中間に位置する。
- ドライバサービス
- カーネルレベルのフィルタドライバであり、Windowsサービスとして実装され、アプリケーションからデバイスを使えるようにする。
VxD、WDM と Windows 98
Windows 98系OS (98, 98SE, Me) は、WDMとVxDの両標準をサポートしている。これらは同じハードウェアに対して異なる機能を提供するが、WindowsMe登場以降の世代のハードウェアでは WDM の方が機能が豊富なものがあった。例えば、TVチューナーカードを VxD ドライバで使うと画像の解像度が384×288ピクセルだったものが、同じカードをWDMドライバで使うと768×576ピクセルが可能となることがある。これは、WDMの一部である Broadcast Driver Architecture による改善[要出典]である。
しかし、改良された機能を使用するにはハードウェアベンダの努力が不可欠である。 古いハードウェアではVxDドライバでは持っていた機能の一部が、WDMドライバには提供されずに開発が終了されたものも多い。また、Windows 9x系のWDMはNtkern.vxdという一種のVxDドライバがNTカーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもあった。
批判
Windows Driver Modelは、それ以前のVxDとWindows NTドライバモデルを大幅に改良したが、以下のような点でドライバ開発者から批判されている[1]。
- 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向けにダウンロード可能となっている。
関連項目
参考文献
- 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について