コンテンツにスキップ

Windows Driver Model

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。TXiKiBoT (会話 | 投稿記録) による 2009年5月11日 (月) 11:05個人設定で未設定ならUTC)時点の版 (ロボットによる 追加: sv:Windows Driver Model)であり、現在の版とは大きく異なる場合があります。

Windows Driver ModelWDM)とは、Microsoft Windows 98Windows 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 のバージョン間で(バイナリ、ソース)互換性があり、ハードウェア固有の制御をバスドライバ経由で行う。

バスドライバ

バスドライバは、バスコントローラ、バスアダプタ、バスブリッジなどを扱う。マイクロソフトが提供しているバスドライバとしては、PCIPnPISASCSIUSBIEEE 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=」等と記入していないかも確認してください。である。

しかし、改良された機能を使用するにはハードウェアベンダの努力が不可欠である。 古いハードウェアではVxDドライバでは持っていた機能の一部が、WDMドライバには提供されずに開発が終了されたものも多い。また、Windows9x系の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.

外部リンク