標準ドライバー ルーチンの概要

各カーネル モード ドライバーは、システム定義の標準ドライバー ルーチンのセットを中心に構築されています。 カーネル モード ドライバーは、システム提供のドライバー サポート ルーチンを呼び出すことによって、これらの標準ルーチン内の I/O 要求パケット (IRP) を処理します。

すべてのドライバーは、接続されているドライバー チェーン内のレベルに関係なく、IRP を処理するために標準ルーチンの基本セットを備えている必要があります。 ドライバーが追加の標準ルーチンを実装する必要があるかどうかは、ドライバーが物理デバイスを制御するか、物理デバイス ドライバーの上に階層化されているか、また基になる物理デバイスの性質によって異なります。 物理デバイスを制御する最下位レベルのドライバーでは、処理のために通常は IRP を下位ドライバーに渡す高位レベルのドライバーよりも、多くのルーチンが必要とされます。

標準ドライバー ルーチンは、2 つのグループに分けることができます。各カーネル モード ドライバーが持つ必要があるグループと、デバイス スタック内のドライバーの種類と場所に応じて省略可能なグループです。

次の表に、必須の標準ルーチンを示しています。

必須の標準ドライバー ルーチン 目的 説明されている場所
DriverEntry ドライバーとそのドライバー オブジェクトを初期化します。 DriverEntry ルーチンの記述
AddDevice デバイスを初期化し、デバイス オブジェクトを作成します。 AddDevice ルーチンの記述
ディスパッチ ルーチン IRP を受信して処理します。 ディスパッチ ルーチンの記述
Unload ドライバーによって取得されたシステム リソースを解放します。 アンロード ルーチンの記述

次の表に、いくつかの省略可能なルーチンを示します。

省略可能な標準ドライバー ルーチン 目的 説明されている場所
Reinitialize DriverEntry で完了できない場合に、ドライバーの初期化を完了します。 再初期化ルーチンの記述
StartIo 物理デバイスで I/O 操作を開始します。 StartIo ルーチンの記述
割り込みサービス ルーチン 割り込み時のデバイスの状態を保存します。 ISR の記述
遅延プロシージャ呼び出し ISR がデバイスの状態を保存した後、デバイス割り込みの処理を完了します。 DPC オブジェクトと DPC
SynchCritSection ドライバー データへのアクセスを同期します。 クリティカル セクションの使用
AdapterControl DMA 操作を開始します。 アダプター オブジェクトと DMA
IoCompletion IRP のドライバーの処理を完了します。 IRP の完了
キャンセル IRP のドライバーの処理を取り消します。 IRP のキャンセル
CustomTimerDpc, IoTimer イベントのタイミングと同期。 同期の手法

現在の IRP およびターゲット デバイス オブジェクトは、多くの標準ルーチンの入力パラメーターです。 すべてのドライバーは、標準ルーチンのセットを使用して段階的に各 IRP を処理します。

慣例により、システムが提供するドライバーは、DriverEntry を除くすべての標準ルーチンの名前の前に、識別できる、ドライバ固有またはデバイス固有のプレフィックスを付けます。 例として、このドキュメントでは、「ドライバー オブジェクトの概要」の図 に示すように、"DD" を使用します。 この規則に従うことで、ドライバーのデバッグと保守が容易になります。