Insider's Eye: Windows 2000のデバイス ドライバを探る

第2回 WDMは何が変わったのか(2/2)

元麻布春男
2000/02/05

 Windows 2000では、サウンドも含めて、デバイス ドライバはすべてカーネル モードへ移行している。したがって、DirectSoundなども含め、すべてのDirectXファンクションのサポートが可能だ。実際、出荷されるWindows 2000には、DirectX 7が搭載されている。もちろん、オーバーヘッドもWindows NT 4.0よりは減少するハズだ。

 しかし、このことは同時に、前述した2つの利点と相反することになる。移植性と信頼性の低下の問題である。しかし、移植性については、もはや気にする必要がなくなってしまった。かつてサポートされたRISCプロセッサは、すでにサポートの対象外となり、事実上サポートされているプラットフォームはx86のみとなったからだ。

 もう1つの利点である信頼性についてはどうだろう。デバイスドライバがカーネル モードへ移行したことは、ドライバのエラーがOSにとって致命傷となるケースが増えるということでもある。これを防止するためWindows 2000では、「ドライバの署名(Driver Signing)」という機能が提供される(すでにWindows 98 Second Editionで採用されており、Windows 2000が初めてというわけではないが)。「ドライバの署名」は、Microsoftが行っているWHQL(Windows Hardware Quality Lab)テストをパスしたドライバに付与されるデジタル署名のことだ。この署名は、デバイス ドライバのプロパティ タブで簡単に確認できる。つまり、デバイス ドライバの信頼性をWHQLでテストすることで、ドライバによる信頼性の低下を避けようというわけだ(しかし、これがうまく機能するかどうかは、WHQL次第だろう。「ドライバの署名」はあくまでも信頼性保証のためのフレームワークにすぎない)。

デバイス ドライバのデジタル署名の確認方法

デジタル署名がついたデバイス ドライバかどうかは、[デバイス マネージャ]を起動し、調べたいデバイス ドライバのプロパティを表示させることで簡単に分かる。
  デバイス ドライバのプロパティ画面を開き、「デジタル署名者」に名前があれば、そのドライバはデジタル署名されたものだ。ここに「デジタル署名はされていません」と書かれていた場合、そのデバイス ドライバはデジタル署名が行われていないものである。
 

[システムのプロパティ]ダイアログの[ハードウェア]タブ

[システムのプロパティ]の[ハードウェア]タブでは、[デバイス マネージャ]グループに[ドライバの署名]ボタンが加わり、デジタル署名のないデバイス ドライバについてのオプションが設定できるようになった。
  Windows 2000では、この[ドライバの署名]グループ ボックスが加わり、デジタル署名のないデバイス ドライバのインストールに対するオプション設定が可能となっている。これにより、ドライバの信頼性の確保と、ドライバのインストール時の管理者権限を不要にするといったことが可能となった。
  ドライバ署名のオプションを設定するにはここをクリック。→
 

Windows 2000のドライバ署名オプション

[ドライバ署名オプション]では、デジタル署名が行われていないデバイス ドライバに対する扱いが設定できる。必要なら、[ファイルの署名の確認]グループの[ブロック - 署名されていないファイルのインストールを防ぐ]をチェックすることで、ユーザーが不用意にデバイス ドライバをインストールしてしまうことを禁止することが可能だ。

ドライバ階層化のメリット/デメリット

 さて、ここまではWindows NTの標準ドライバモデルであるWindows NTカーネル モード ドライバの特徴について触れてきたが、もう1つの特徴は、ドライバ レイヤ全体が階層化されていることだ。図4はWindows 2000の一般的なドライバの階層化を示したものだが、ドライバ レイヤが何階層に及ぶかは、デバイスによって異なる。

図4 Windows 2000の一般的なドライバ レイヤ

Windows 2000のドライバは、図のように細かく複数の階層により構成されている。これにより、システム レスポンスを良好に保つことが可能となる。

 図5は、SCSIハードディスクにアクセスする際に利用するであろうデバイス ドライバを図にしたものだ。アプリケーションのファイルI/O要求は、カーネル モードのシステム サービスを経て、ファイル システム ドライバへと送られ、SCSI-2クラス ドライバ(ハードディスクに対するコマンドセットを定義)、SCSIポート ドライバ(SCSIコントローラに対するアクセスを定義)を経由して、ハードウェアに伝えられる。SCSI-2クラス ドライバが、ANSIの標準に基づいており、ベンダごとに対応する必要がないため、ミニドライバを必要としない(逆に特定のハードウェア固有のコマンド、ベンダ ユニークに対応する必要があれば、このクラス ドライバを置きかえればよい)のに対し、SCSI-2クラス ドライバのコマンドをホストアダプタやコントローラ チップに渡すSCSIポート ドライバは、こうしたハードウェアに依存した部分を記述したミニドライバが必要になる。

図5 SCSIハードディスクへのアクセスで利用されるデバイス ドライバ

SCSIディスクのアクセスに利用されるデバイス ドライバを示したもの。SCSI-2クラス ドライバは、ANSI標準が定められているため、ベンダごとに個別に対応する必要がない。そのため、ほかのデバイス ドライバに比べると構造が簡単になっている。

 では、なぜこのようにデバイス ドライバを細かく階層化するのか。最大の理由は、個々のデバイス ドライバをシンプルかつ簡素にすることで、開発を容易にすると同時に、開発の際に生じる可能性のあるバグを最大限減らすことで、信頼性を高めることだ(Windows NTがマルチプラットフォームであった時点においては、汎用性や移植性も重要な利点だっただろう)。とにかく、「WDM」=「階層化ドライバ」ではなく、Windows NTではそもそものドライバ アーキテクチャが階層化されていた、ということを覚えておいてほしい。ただし、何事にも例外はある。たとえば、ディスプレイドライバは、図に示したような複雑な階層化は行われていない(行われる予定もない)。それは、ディスプレイ ドライバに求められる性能水準がきわめて高いため、階層化によるオーバーヘッドが許されないと考えられているからだ。

 
     
 INDEX
  なぜWindows 2000を使わないのか
  WDMは何が変わったのか(1/2)
  WDMは何が変わったのか(2/2)
  WDMの理想とするところ


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間