Windows Driver Model
概要
WDMドライバーは複雑に階層化されており、I/O要求パケット (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ドライバーは以下のように分類される。
バスドライバー
バスドライバーは、バスコントローラー、バスアダプター、バスブリッジなどを扱う。マイクロソフトが提供しているバスドライバーとしては、PCI、PnPISA、SCSI、USB、IEEE 1394などがある。各ベンダーは必要に応じて独自のバスドライバーを作成できる。バスドライバーは、同じタイプのバスが複数あれば、それらをまとめて制御できる。
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カーネルをエミュレートする形であったため、逆にパフォーマンスや安定性で不利になることもあった。
ドライバー署名
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署名が利用可能である。