Windows Vista 時代のデバイス・ドライバ開発
第6回WDF（KMDF）の概要と解説
日高 亜友，川出 智幸，相良 徹

第 6 回目となる今回はサンプル・ドライバをビルドし，インストールするまでの手順をステップごとに解説する．実際に USB フラッシュ・メモリを使った KMDF のサンプル・ドライバを，別の USB ターゲットに置き換えてテストする方法についても解説しているので参考にしてほしい．

（編集部）

今回から WDF（Windows Driver Foundation）についてドライバ・モデルには，次のような問題点がありました．

解説します．WDF は，Windows Vista や WDK（Windows¡汎用 WDM ドライバ・モデルは低レベルで複雑である

Driver Kit）とともに Microsoft 社が導入する新しいドライ¡DDI は元々は OS（オペレーティング・システム）記述

バ・モデルを実現するためのデバイス・ドライバ・フレー

用で，デバイス・ドライバ開発用途を目的として設計

ムワーク（プログラミング・インターフェースであるライされておらず，またバージョン管理もされていないブラリ，クラス）と，それをサポートする開発ツールが含¡ミニポート・モデルの数が多すぎるまれます．

¡ほとんどのドライバをカーネル・モードで実行する必Windows NT3.1 の登場から現在まで，Microsoft 社が提供してきた 32 ビット系 Windows のデバイス・ドライバを記述するためのデバイス・ドライバ・インターフェース

要がある¡ドライバ・モデルの数が多いため，テストと検証ツールの効率的な開発と運用が難しい（DDI）は，それほど大きく変わりませんでした．あえて挙なかでもプラグ&プレイと電源管理機能は，同じ目的をげれば，Windows2000 が登場したときに，プラグ&プレ実現するために同種のカーネル・レベル・コードがさまざイと電源管理をサポートする仕組みを追加するとともに，まなプログラマによって書かれています．それが開発者のWindows98 系とデバイス・ドライバのプログラミング・負荷でもあり，トラブルの原因ともなっていました．このインターフェースを共通化するために導入された，WDMような反省点から WDF が検討され，以下の目標を掲げた（Windows Driver Model）が大きな変更点でした．そしてドライバ・モデルとして開発されました．

Windows Vista のリリースに合わせて公開された WDK で¡ドライバ・モデルをシンプルで柔軟にするは，従来の WDM に加えて，WDF によるデバイス・ドラ¡ドライバ・モデルと DDI を OS から独立させる

イバの記述と実装を新しくサポートするようになりました．

¡バージョン管理と複数バージョンの共存サポート

今までのデバイス・ドライバ・モデルには，汎用的なWDM のほかに，Windows NT 時代から続く，ストレージやネットワーク，オーディオなどの各デバイス・クラスに対応した，多くのデバイス・クラス固有のドライバ・モデ
ルがありました．途中で追加された WDM は，非同期入出¡一貫性と拡張性の確保¡多くのデバイス・ドライバをユーザ・モードで作成可能にする¡高水準言語の使用を可能にするドライバ・モデルの導入力やドライバ階層化，プラグ&プレイ，電源管理，WMI¡DDI は検証と解析を簡易化できるように設計（Windows Management Instrumentation）といった機構¡将来はドライバ部分を隔離させることを可能にするドを提供しています．

ライバ・モデル

デバイス・クラス固有のドライバ・モデルは一般に，これらの目標がすべて実現されたわけではありません．

Microsoft 社が作成したポート・ドライバと，独立系ハーMicrosoft 社の技術者によると，ネットワーク・デバイスドウェア・ベンダが作成したミニポート・ドライバの組みやディスプレイ・アダプタなどの一部を除いて，すべての合わせで構成されています．このような従来のデバイス・ドライバはユーザ・モードで実装されるべきだという考え

166 KEYWORD ―― WDM，WDF，WDK，KMDF，UMDF，DDI，カーネル・モード，ユーザ・モード

Dec. 2007

Windows Vista 時代のデバイス・ドライバ開発
表 1 WDF がサポートする OSアーキテクチャ
KMDF
UMDF
wlh
wnet
wxp
w2k
○
―wlh
○
○

wnet
○
○

表 2 WDF がサポートするドライバ・モデル
wxp
○
○

w2k
○
―

Windows Vista と Windows Server Longhorn （x86, x64, ia64）
Windows2003 Server SP1（x86, x64, ia64）
Windows XP SP2（x86）
Windows2000 SP4（x86）
サポート
未サポート

デバイス・クラスまたはドライバ・モデル
ウイルス・フィルタ

KMDF

UMDF

SDV

PREfast

――○

○

―○

―

○*―○
○
○

――――――○
○

○
○
○
○

○

―○

○

○
―――――――――○
――――○
○
○
○
○

特定クラスの USB やIEEE 1394 ドライバ
ディスプレイ・アダプタ
モデム
HID
非 PnP ドライバ

Windows におけるユーザ・モード・ドライバ導入の第一

ISA, PCI, PCMCIA,USB, SD
NDIS, TDI
プリンタ
スキャナ, WIA
SCSI
ビデオ・キャプチャ

歩であると言えます．

* カーネル・モード・ドライバ固有の警告メッセージを無視する必要がある方があるようであり，その意味でも WDF の導入は，

1．WDF の概要
2．KMDFWDF は，カーネル・モードで動作するドライバのための KMDF（Kernel-Mode Driver Framework）とユーザ・

本節では，主に KMDF について解説していきます．

モードで動作するドライバのための UMDF（User-Mode

KMDF をよく知るために，まず UMDF と比較してみま

Driver Framework），それらをサポートする開発ツールかしょう．

ら構成されます．基本的に，KMDF は Windows2000 以降

UMDF は，WDF の導入で新たに用意された，ユーザ・の OS を サ ポ ー ト し ， UMDF は Windows XP 以 降 の サ

モードでデバイス・ドライバを動作させ，またそれを記述すポートを行います（表 1）．

るための仕組みですが，その実体は COM 形式の DLL です．

カーネル・モードで動作する KMDF は，WDM で実現

しかし，アプリケーションからは直接呼ばれず，常にしてきた機能を置き換え，なおかつデバイス・クラス固有カーネルから呼び出される点が通常の COM とは異なりまのドライバにも対応させることを目標としています．

す（図 1）．

KMDF や UMDF も，WDK（ビルド 6000）に含まれるバー

一方，KMDF の実体は，従来のカーネル・モード・ドジョンはそれぞれ 1.5 です．WDF の理解にあたって一番分ライバを記述する仕組みである WDM を利用して，その上かりにくいので注意することは，まだ WDK/WDF が開発途中であり，その使用には制約や条件があることです．
WDK に含まれる PREfast や SDV といったツールは，アプリケーション

WDF での利用を前提に開発されたものですが，これらの利用についても，まだいくつかの制約があります（表 2）．

UMDFホスト・プロセス
UMDF
ドライバ

UMDF
ドライバ

ユーザ・モード

Win32 APIWDF 共通のデバイス・ドライバ・モデルを記述するために最適化されたオブジェクト・モデルが，KMDF とI/Oマネージャ

……

リフレクタ

カーネル・モード

UMDF には導入されています．しかし，モデルは共通でも実装の形態は異なります．WDM と同じく KMDF は C

下位ドライバで記述する.SYS のコードとして実装しますが，UMDF はデバイス

VC++ で記述する DLL であり，これらの間ではソース・コードの流用すらできません．

Dec. 2007

図 1 UMDF ドライバの構成概要

167