Comments
Description
Transcript
Windows Vista 時代の デバイス・ドライバ開発 Windows
Windows Vista 時代の デバイス・ドライバ開発 第7回 WDF(UMDF)の概要と解説 日高 亜友,川出 智幸,相良 徹 今回は WDF が新たに提供する UMDF に基づいたユーザ・モード・ドライバのアーキテクチャを紹介し,開発手法か らインストールまでをサンプル・ドライバを使用して解説する.サンプル・ドライバを改造して別のターゲットに置き換 えてテストする方法についても検証する. (筆者) した.これは,WDF という新しいデバイス・ドライバ開 発用のフレームワークを開発者向けに提供するため,優先 1.UMDF(User Mode Driver Framework)とは して検討された重要なことです.特に以下の点を目標にし て開発されています. 前回(2007 年 12 月号,pp.166-176)は WDF(Windows Driver Foundation)を構成する KMDF(Kernel Mode Driver Framework)を解説したので,今回はもう一つの構成要素 ¡ドライバのエラーがシステム・ダウンを起こさない安 定性の提供 ¡次項のような既存システムとの互換性の維持 である UMDF(User Mode Driver Framework)を取り上 -API(Application Program Interface) げます. -プラグ&プレイ,電源管理 WDF には,新しいドライバ・モデルをカーネル・モー -ロードとアンロード,インストール・パッケージの仕 ドとユーザ・モードで実現するための 2 種類のデバイス・ 組み ドライバ・フレームワーク(プログラマ・インターフェー -ドライバの階層化,同期機構,メッセージ・パッシ スであるライブラリやクラス)と,それをサポートする開 ング駆動など,既存 DDI との共存 発ツールが用意されています.これらは Windows Vista の 登場に合わせて開発された WDK(Windows Driver Kit)に ¡ユーザ・スペースで動作することによるセキュリティ の確保 ¡KMDF とのドライバ・モデルの共通化〔現在は同一の 含まれます. Windows においてユーザ・モードで汎用的なデバイス・ DDI(Device Driver Interface)やデータ構造を提供す ドライバを開発する仕組みは,今回の WDK で初めて導入 ることはできていないが,ドライバ・モデルは共通化 されました.UMDF 導入の経緯については前回も触れま している〕 ● UMDF ドライバの構造 アプリケーション UMDF ドライバとそれを取り巻くシステム・コンポー UMDFホスト・プロセス UMDF ドライバ UMDF ドライバ Win32 API IOマネージャ ネントの関係を図 1 に示します.従来のドライバは比較的 … 単純な階層構造を持っていました.それと比べて,UMDF ユーザ・ モード は本来,カーネル・モードで動作するべきデバイス・ドラ カーネル・ モード イバの仕事をユーザ・モードに移動するために,「リフレ リフレクタ クタ」と呼ぶ機構を導入しています.リフレクタは UMDF の開発に合わせて Microsoft 社が提供しているものですが, 下位ドライバ この仕組みによって最上位のカーネル・モード・ドライバ をユーザ・モードで代替させることができます.現在はリ デバイス 図 1 UMDF ドライバの構成概念 130 KEYWORD ―― WDF,KMDF,UMDF,COM,COM+,DCOM フレクタよりも上位にカーネル・モードのドライバやフィ ルタ・ドライバを配置することはできませんが,ユーザ・ Jan. 2008 Windows Vista 時代の デバイス・ドライバ開発 デバイス・スタック デバイス・スタック ホスト・プロセス ホスト・プロセス アプリケーション UMDFホスト・プロセス COM DLL フィルタ・ ドライバ UMDF ドライバ UMDF ドライバ Host Runtime Call Framework … ユーザ・モード IRP カーネル・モード IOマネージャ リフレクタ カーネル Add Device Create WDF Device Create WDF Queue ユーザ・ モード・ ドライバ Callback呼び出し 結果リターン イベント完了通知 リフレクタ WinUSB カーネル・ ドライバ1 DDI デバイス・ドライバ・ インターフェース ユーザ・モード カーネル・モード IPCメッセージ通信 カーネル・ ドライバ IO マネージャ カーネル・ ドライバ2 IRP “Up” Device Object “Down” Device Object リフレクタ ⋮ カーネル カーネル・ ドライバn カーネル・ドライバ ベンダ開発部分 カーネル・ドライバ 図 2 UMDF ドライバの構成図 図 3 ホスト・プロセスと呼び出し関係 モードのドライバは階層構造を持つことができ,またユー ザ・モードのフィルタ・ドライバを配置することも考慮さ る複数のデバイス・オブジェクトは,IO リクエストの処理 れています(図 2). において各デバイス用のスタックとは別の「デバイス・ス カーネル内の IO マネージャがカーネル・モード・ドラ タック」として構成されます.「デバイス・スタック」から イバの管理を行うというアーキテクチャは,Windows NT は,デバイス・オブジェクトのスタックのほかに構成する 時代から変わっていません.UMDF によるユーザ・モー ドライバを参照することができ,リクエストにおいて処理 ド・ドライバの実装では,最上位のカーネル・ドライバ部 対象のデバイスを識別するためのハンドルと関連付けられ 分においてカーネル・ドライバと同じ振る舞いを IO マネー ています. ジャと下位層のドライバに対して行いながら,ホスト・プ 図 3 は,ユーザ・モード・ドライバを含むホスト・プロ ロセス内のユーザ・モード・ドライバと相互通信を行うの セスと呼び出し関係を中心に示したものです.デバイス・ がリフレクタの役割です.リフレクタの下位には,後述す オブジェクトはドライバが駆動するデバイスごとに作成さ る WinUSB のように Microsoft 社が提供している Windows れ,COM アーキテクチャの DLL として実装され,個別の にあらかじめ組み込まれているインハウス・ドライバを置 ユーザ・プロセスとして動作します. くこともでき,ベンダが開発するカーネル・モード・ドラ イバを配置することも可能です. WDM のカーネル・モードのドライバでは,IO マネー ジャからの要求をディスパッチ・ルーチンのコールバック カーネルの IO マネージャが,デバイスに対して IO リク と IRP によるメッセージ・パッシングで受け取って処理し エストを発行した場合,複数のドライバがリクエストを処 ていました.けれどもユーザ・モード・ドライバの構成で 理します.各ドライバはデバイスへのリクエストを処理す は,WDF に対する呼び出しと,COM(Component Object るために,デバイス・オブジェクトで関連付けられます. Model)インターフェースを介して登録したコールバック・ デバイス・オブジェクトは,デバイス・ドライバが IO マ ルーチンの呼び出しという形式で実装しています. ネージャとやりとりするためのデータ構造やディスパッ ● COM の採用 チ・ルーチンのポインタを持つものです.しかし,関連す Jan. 2008 COM とは Microsoft 社が開発・提唱しているコンポー 131