WDM ドライバーの種類
WDM ドライバーには、バス ドライバー、関数ドライバー、およびフィルター ドライバーの 3 種類があります。
- バス ドライバーでは、個々の I/O バス デバイスが駆動され、デバイスに依存しないスロット単位の機能が提供されます。 また、バス ドライバーでは、バスに接続されている子デバイスも検出されて報告されます。
- 関数ドライバーでは、個々のデバイスが駆動されます。
- フィルター ドライバーでは、デバイス、デバイスのクラス、またはバスの I/O 要求がフィルター処理されます。
このコンテキストでは、バスは、他の物理デバイス、論理デバイス、または仮想デバイスがアタッチされている任意のデバイスです。バスには、SCSI や PCI などの従来のバスに加えて、パラレル ポート、シリアル ポート、および i8042 ポートが含まれます。
ドライバー開発者は、さまざまな種類の WDM ドライバーを理解し、どの種類のドライバーを作成しているかを把握することが重要です。 たとえば、ドライバーで各プラグ アンド プレイ IRP を処理するかどうか、およびこのような IRP をどのように処理するかは、作成するドライバーの種類 (バス ドライバー、関数ドライバー、またはフィルター ドライバー) によって異なります。
次の図は、デバイスのバス ドライバー、関数ドライバー、およびフィルター ドライバーの関係を示しています。
通常、各デバイスには、親 I/O バス用のバス ドライバー、デバイス用の関数ドライバー、およびデバイス用の 0 または 1 つ以上のフィルター ドライバーがあります。 多くのフィルター ドライバーを必要とするドライバーの設計では、最適なパフォーマンスが得られません。
前の図のドライバーは次のとおりです。
"バス ドライバー" では、バス コントローラー、アダプター、またはブリッジにサービスが提供されます。 バス ドライバーは必須のドライバーであり、マシン上のバスの種類ごとに 1 つのバス ドライバーがあります。 Microsoft では、ほとんどの一般的なバスに対してバス ドライバーを提供しています。 IHV と OEM では、その他のバス ドライバーを提供できます。
"バス フィルター ドライバー" は、通常はバスに価値を付加するもので、Microsoft またはシステム OEM によって提供されます。 バスには、任意の数のバス フィルター ドライバーを含めることができます。
"下位レベルのフィルター ドライバー" では、通常はデバイス ハードウェアの動作が変更されます。 これらはオプションであり、通常は IHV によって提供されます。 デバイスには、任意の数の下位レベルのフィルター ドライバーを含めることができます。
"関数ドライバー" は、デバイスのメイン ドライバーです。 関数ドライバーは、通常はデバイス ベンダーによって作成され、必須です (デバイスが RAW モードで使用されていない場合)。
"上位レベルのフィルター ドライバー" は、通常はデバイスに付加価値機能を提供します。 これらはオプションであり、通常は IHV によって提供されます。
次のトピックでは、3 つの一般的な種類の WDM ドライバー (バス ドライバー、関数ドライバー、フィルター ドライバー) について詳しく説明します。 また、サンプルの USB ドライバーを使用する WDM ドライバー レイヤーの例も含まれています。