Windows Driver Model
Windows Driver Model(WDM)とは、Microsoft Windows 98 と Windows 2000 で導入されたデバイスドライバのフレームワークであり、それ以前の Windowsで使われていたVxDなどを代替するものとして登場した。導入当時はWin32 Driver Model と呼ばれていた。
概要
WDMドライバは複雑に階層化されており、I/O Request Packet(IRP)を使って相互に通信する。WDMは、各種要求を標準化し書くべきコード量を削減した統一的ドライバモデルとして、Windows 98 と Windows 2000 向けに定義された。WDMドライバは、それ以前の Windows (95 や 3.1 や 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 による改善である。[要出典]エラー: タグの貼り付け年月を「date=yyyy年m月」形式で記入してください。間違えて「date=」を「data=」等と記入していないかも確認してください。