ストリーミングのミニドライバー
注: このセクションでは、古い Stream.sys クラス ドライバーについて詳しく説明します。 Microsoft Windows XP のリリースでは、Microsoft は既存の ドライバーに対してのみStream.sys をサポートしています。 このリリースの時点で、Microsoft は、ベンダーに対して、AVStream クラス ドライバー モデルを使用して、新しいビデオまたはオーディオ/ビデオ マルチメディア ドライバーを開発することを検討するようお勧めしています。 詳細はAVStream の概要を参照してください。 オーディオのみのドライバーを開発する場合は、Microsoft が提供する Portcls.sys クラス ドライバーの下にオーディオ ミニポート ドライバーを記述する必要があります。 詳細については、「オーディオ ミニポート ドライバー」を参照してください。
ベンダーは、Microsoft が提供するStream.sys クラス ドライバーで動作するミニドライバーを提供することで、ビデオのみのデバイスまたはオーディオ/ビデオ デバイスをサポートできます。 このドキュメントでは、Stream.sysのもとにあるベンダーが提供するミニドライバーをストリーミング ミニドライバーと呼びます。
たとえば、ビデオ キャプチャ デバイスと DVD プレーヤーは、ストリーミング ミニドライバーでサポートできます。 テクノロジー固有の情報については、ビデオ キャプチャ デバイスと DVD デコーダー ミニドライバーを参照してください。
ストリーミング ミニドライバーは、カーネル ストリーミング セマンティクスをサポートします。 このドキュメントを使用するには、ドライバ開発者は、カーネルストリーミングで説明されているように、基本的なカーネルストリーミングの概念に精通している必要があります。
ストリーム クラス ドライバーは、オペレーティング システムとの対話の多くを処理することで、ストリーミング デバイス用のハードウェア ドライバーの記述を簡単にするように設計されています。
ミニドライバーは、ストリーム クラス ドライバーに代わりに同期を処理させることができます。 たとえば、ストリーム クラス ドライバーは必要に応じてミニドライバーの I/O 要求をシリアル化できます。 クラス ドライバーに同期を処理させると、ミニドライバー のマルチプロセッサは安全になりますが、非再入可能になります。 これはローエンドからミディアムエンドのハードウェアに適しています。
クラス ドライバーは、ファイル操作を自動的に同期します。 たとえば、ストリームのオープンとデバイスは、ミューテックス、セマフォ、またはイベントを使用してミニドライバーなしで正しくシリアル化されます。
クラス ドライバーは、ミニドライバーからカーネル ストリーミング セマンティクスの実装を抽象化します。
クラス ドライバーは、PnP マネージャーとのやり取りをすべて処理します。 次に例を示します。
- クラス ドライバーは、ミニドライバーの代わりに機能デバイス オブジェクトを作成します。
- クラス ドライバーは、リソース構成 (ポート アドレスの変換、メモリ範囲の変換とマッピング、割り込みの接続など) を管理します。
- クラス ドライバは、IRP_MN_START_DEVICEやIRP_MN_STOP_DEVICEなどの PnP IRP を処理します。
低レベルのバッファー管理はすべて、クラス ドライバーによって処理されます。
- 必要に応じて DMA アダプター オブジェクトを割り当てます。
- DMA のバッファーのマッピングと散布図/収集リストを作成します。
- DMA と PIO の両方に対してバッファーを正しくロックし、フラッシュします。
すべての IOCTL パラメーター検証は、クラス ドライバーによって実行されます。
すべての要求は、ウォッチドッグ タイマーを使用してクラス ドライバーによってタイミングが設定されます。
ミニドライバーはデバイス オブジェクトを作成しませんが、必要に応じてクラス ドライバーのデバイス オブジェクトを共有します。 これにより、システムリソースを節約できます。
アダプターごとに作成されるデバイス オブジェクトは 1 つだけです。 アダプターでサポートされている複数のサブデバイス (ストリームと呼ばれます) は、カーネル ストリーミング ピンによって表されます。