Windows Driver Model (WDM)とは
Windows Driver Model (WDM) は、Windows 98 および Windows 2000 で導入されたデバイスドライバーのフレームワークであり、それ以前の Windows で使用されていた VxD などの代替として登場しました。導入当初は Win32 Driver Model と呼ばれていました。
概要
WDM ドライバーは複雑に階層化されており、I/O 要求パケット (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 ドライバーの種類
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 の両方の標準をサポートしています。これらは同じ
ハードウェアに対して異なる機能を提供しますが、Windows Me 以降の世代の
ハードウェアでは WDM の方が機能が豊富なものがありました。例えば、TV チューナーカードを VxD ドライバーで使用すると画像の解像度が 384 × 288 ピクセルだったものが、同じカードを WDM ドライバーで使用すると 768 × 576 ピクセルが可能になることがあります。これは、WDM の一部である Broadcast Driver Architecture による改善です。しかし、改良された機能を利用するには
ハードウェアベンダーの努力が不可欠です。
古い
ハードウェアでは、VxD ドライバーでは持っていた機能の一部が、WDM ドライバーでは提供されずに開発が終了されたものも多くあります。また、Windows 9x 系の WDM は `Ntkern.vxd` という一種の VxD ドライバーが NT カーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもありました。
批判
WDM は、それ以前の 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 ドライバーはセキュリティ上の配慮から、正式な作成者を確認できるデジタル署名を行なってリリースすることが推奨されています。デジタル署名の手段としては WHQL (Windows Hardware Quality Labs) 署名、または Authenticode 署名(自己署名)が存在します。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 について