次の方法で共有


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

カーネルモードドライバーを設計する際には、以下の点に注意してください:

  • 各ドライバーは、ドライバー全体のデータ構造とリソースを初期化する 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のデバイスタイプ別ドキュメントを参照してください。