標準ドライバー ルーチンの要件
カーネルモードドライバーを設計する際には、以下の点に注意してください:
各ドライバーは、ドライバー全体のデータ構造とリソースを初期化する DriverEntry ルーチンが必要です。 I/Oマネージャは、ドライバーをロードするときに DriverEntry ルーチンを呼び出します。
すべてのドライバーは、I/O要求パケット(IRP)を受信して処理するディスパッチルーチンを少なくとも1つ持つ必要があります。 各ドライバーは、 DRIVER_OBJECT 構造の中に、ドライバーが受信できる IRP major function code ごとに、ディスパッチルーチンのエントリポイントを配置する必要があります。 ドライバーは、各IRPメジャー関数コードに対して別々のディスパッチルーチンを持つことも、複数の関数コードを扱う1つ以上のディスパッチルーチンを持つことも可能です。
すべてのWDMドライバーは Unload ルーチンが必要です。 ドライバーは Unload ルーチンのエントリポイントをドライバーのドライバーオブジェクトに配置する必要があります。 PnPドライバーのアンロードルーチン の責任は最小ですが、 非PnPドライバーのアンロードルーチン は、ドライバーが使用しているシステムリソースをリリースします。
すべての WDM ドライバーは AddDevice ルーチンを有し、ドライバーオブジェクトの driver extension にそのエントリポイントを定義する必要があります。 AddDevice ルーチンは、ドライバーが制御する各 PnP デバイスのデバイスオブジェクトを作成し、初期化する役割を果たします。
ドライバーは StartIo ルーチンを持つことができ、これはドライバーがシステム提供のIRPキューにキューイングしたIRPのI/Oオペレーションを開始するためにI/Oマネージャが呼び出します。 StartIo ルーチンを有しないドライバーは、受信したIRPのために内部キューを設定して管理するか、ディスパッチルーチン内ですべてのIRPを完了する必要があります。 上位レベルドライバーは、ディスパッチルーチンから下位ドライバーに直接IRPを渡すだけであれば、 StartIo ルーチンがない場合があります。
ある種のミニポートドライバーは、前述の要件の例外です。 ミニポートドライバーの要件については、Windows Driver Kit (WDK)のデバイスタイプ固有のドキュメントを参照してください。
ドライバーが他の種類の標準ルーチンを持つかどうかは、そのドライバーの機能と、 そのドライバーがどのようにシステムに適合するか(例えば、システムが提供する ドライバーと相互運用するかどうか)によって異なります。 詳細は、WDKのデバイスタイプ別ドキュメントを参照してください。