SCIENCE PARK

デバドラ講座

【 デバドラ講座15 : ドライバの種類 】

カーネルモードのドライバは大きく分けて上位デバイスドライバ、中間デバイスドライバ、物理デバイスドライバの3種類があります(図1)。

図1:ドライバの分類
図1.ドライバのレジスタ

上位デバイスドライバはアプリケーションからI/Oマネージャを介して呼び出されます。そして、I/Oマネージャを介して下位のドライバを呼び出し、I/O操作を実行します。ファイルシステムドライバは上位デバイスドライバの1つです。ファイルシステムドライバはFAT、NTFSなど、特定のファイルシステムに依存する部分はここで処理され、下位のドライバはファイルシステムの違いを意識せずに処理を実行できます。ファイルシステムドライバはメモリマネージャと密接な関係にあり、システムの中でも重要な役割を果たしています。

中間デバイスドライバはドライバ階層構造の中間に位置し、デバイスを直接操作することはありません。中間ドライバは、中間ドライバより下位のドライバを呼び出し、I/O操作を行います。中間ドライバの上にはファイルシステムドライバなどの上位ドライバが存在します。中間ドライバの下にはポートドライバなどの物理ドライバが存在します。中間ドライバはドライバの付加機能や、デバイスのクラス化の機能を提供します。

クラスドライバは典型的な中間ドライバです。クラスドライバは特定のインタフェースに依存せず、HD、CD-ROM、スキャナなど特定のデバイス固有の機能に対応するためのドライバです。モデムクラスドライバを例にして説明します(図2)。図2の上位にモデムクラスドライバが存在します。クラスドライバは下位のドライバを呼び出し、I/O操作を行います。インタフェースに依存する部分は下位のドライバが処理を実行します。

図2:中間ドライバの例(モデムクラスドライバ)
図2:中間ドライバの例(モデムクラスドライバ)

フィルタドライバも典型的な中間ドライバです。フィルタドライバは2つのドライバ層の間に位置し、下位のドライバの動作を変更します。つまり、上位と下位のドライバの間で、特殊な動作を加えるという処理を行います。それ以外の部分は処理を行わず、そのまま下位ドライバに伝えます。フィルタドライバでは、複雑かつドライバ開発者が予期しない処理を実行することができます。

物理デバイスドライバは直接デバイスを制御し、ポートドライバとミニポートドライバの2種類があります。物理デバイスドライバは上位のドライバや、アプリケーションから呼び出されます。ポートドライバはデバイスの規格、仕様などの標準的な部分を制御し、主にOSベンダーから提供されます。ミニポートドライバはデバイスに密接な部分を制御し、デバイスベンダーが提供します。

ドライバは3つの階層に分かれていますが、アプリケーションからデバイスを操作する際、すべての層が存在するとは限りません。例えばSCSI接続のハードディスクの場合、

  • アプリケーション
  • →ファイルシステム
  • →クラスドライバ
  • →ポートドライバ
  • →ミニポートドライバ
  • →デバイス

の順にデバイスにアクセスし、3つの層すべてを通ります。一方、特別な機能を持つPCIポートの場合、

  • アプリケーション
  • →ポートドライバ
  • →デバイス

の順にデバイスにアクセスし、1つの層しか通りません。このように、デバイスの種類によって、アプリケーションからのデバイス制御方法は多様です。

標準のデバイスドライバはOSと共にマイクロソフト社によって提供されています。通常、ハードウェアに依存する部分のドライバを開発すれば、デバイスは問題なく使用できます。ただし、次の場合には他のドライバを開発する必要があります。

  1. 特殊な機能を持つポートを定義するとき
  2. 既存のドライバレイヤにフィルタドライバを設け、新しい機能を追加するとき
  3. 既存のドライバに新しい機能を追加して、ドライバを置き換えるとき

参考資料

「NTドライバプログラミング」
Peter G. Viscarola、W. Anthony Mason著 久保雅俊、三浦秀朗訳 サイエンスパーク株式会社 監修
「WDMデバイスドライバプログラミング完全ガイド」上
Edword N. Dekker, Jpseph M. Newcomer著 株式会社クイック訳
page up