ドライバー スタックの起動

システムは、ネットワーク デバイスを検出した後、デバイスの NDIS ドライバー スタックを開始します。 デバイスは、仮想デバイスまたは物理デバイスです。 どちらの場合も、ドライバー スタックの開始操作は次のように続行されます。

  1. ドライバーがまだ読み込まれていない場合、システムはドライバーを読み込んで初期化します。

    ドライバーは特定の順序で読み込まれません。

  2. システムは、各ドライバーの DriverEntry 関数を呼び出します。

    DriverEntry が返された後。

    • デバイスのミニポート アダプターが停止状態です。
    • フィルター モジュールは切断状態です。
    • プロトコル バインドが「非バインド」状態です。
  3. システムは、ミニポート アダプターを開始する NDIS を要求します。

    ミニポート アダプターを初期化するには、NDIS ミニポート ドライバーの MiniportInitializeEx 関数を呼び出します。 MiniportInitializeEx が成功した場合、ミニポート アダプターは「一時停止」状態に入ります。

  4. NDIS は、ミニポート ドライバーに最も近いモジュールで始まり、ドライバー スタックの上部に進んで、フィルター モジュールを接続します。

    ドライバー スタックにフィルター モジュールを接続するドライバーを要求するには、NDIS は、フィルター ドライバーの FilterAttach 関数を呼び出します。 各接続操作が成功すると、フィルター モジュールは一時停止状態になります。

  5. 基になるすべてのドライバーが一時停止状態になった後、NDIS はプロトコル ドライバーの ProtocolBindAdapterEx 関数を呼び出します。

    その後、プロトコル ドライバーのバインドが開始状態になります。 プロトコル ドライバーは NdisOpenAdapterEx 関数を呼び出して、ミニポート アダプターとのバインドを開きます。

  6. NDIS は、バインドに必要なリソースを割り当て、プロトコル ドライバーの ProtocolOpenAdapterCompleteEx 関数を呼び出します。

    バインドが一時停止状態になります。

  7. バインド操作を完了するために、プロトコル ドライバーは NdisCompleteBindAdapterEx 関数を呼び出します。

  8. NDIS は、ドライバー スタックを再起動します。 ドライバー スタックの再起動の詳細については「ドライバー スタックの再起動 」を参照してください。