DriverEntry の必須の役割

DriverEntry ルーチンは、以下の処理を順に行う必要があります。

  1. ドライバーの標準ルーチンのエントリ ポイントを指定します。

    ドライバーは、ドライバー オブジェクトまたはドライバー拡張機能に標準ルーチンの多くのエントリ ポイントを格納します。 このようなエントリ ポイントには、ドライバーの AddDevice ルーチン、ディスパッチ ルーチン、StartIo ルーチン、Unload ルーチンのエントリ ポイントが含まれます。 たとえば、ドライバーは、AddDeviceDispatchPnPDispatchPower ルーチンのエントリ ポイントを次のようなステートメントで設定します (Xxx は、ドライバーを識別するベンダーが指定したプレフィックスのプレースホルダーです)。

        :
    DriverObject->DriverExtension->AddDevice = XxxAddDevice;
    DriverObject->MajorFunction[IRP_MJ_PNP] = XxxDispatchPnp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = XxxDispatchPower;
        :
    

    ISR や IoCompletion ルーチンなどの追加の標準ルーチンは、システム サポート ルーチンを呼び出すことによって指定されます。 詳細については、個々の標準ドライバー ルーチンの説明を参照してください。

  2. ドライバーが使用するさまざまなドライバー全体のオブジェクト、型、またはリソースを作成または初期化します。 ほとんどの標準ルーチンではデバイスごとにオブジェクトが使用されるため、ドライバーは、AddDevice ルーチンで、または IRP_MN_START_DEVICE 要求を受信した後に、このようなオブジェクトを設定する必要があることに注意してください。

    ドライバーにデバイス専用スレッドがある場合、またはカーネル定義ディスパッチャー オブジェクトを待機している場合、DriverEntry ルーチンはカーネル ディスパッチャー オブジェクトを初期化する可能性があります (ドライバーがオブジェクトを使用する方法によっては、代わりに AddDevice ルーチンで、または IRP_MN_START_DEVICE 要求を受信した後に、このタスクを実行する場合があります)。

  3. 割り当て済みで不要になったメモリを解放します。

  4. NTSTATUS を返すことで、ドライバーが正常にロードされ、PnP マネージャからのデバイスの構成、追加、起動の要求を受け付け、処理できるかどうかを示します (「DriverEntry の戻り値」を参照)。