...

Windows Vista 時代の デバイス・ドライバ開発 Windows

by user

on
Category: Documents
4

views

Report

Comments

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
Fly UP