次の方法で共有


中間ドライバーの初期化

NDIS 中間ドライバーは、その DriverEntry ルーチンのコンテキストでその MiniportXxx 関数とその ProtocolXxx 関数を登録します。 MiniportXxx 関数を登録するために、中間ドライバーは、NDIS_INTERMEDIATE_DRIVER フラグ設定を伴う NdisMRegisterMiniportDriver 関数を呼び出す必要があります。 このフラグは、ドライバーが MiniportDriverCharacteristics で渡す NDIS_MINIPORT_DRIVER_CHARACTERISTICS 構造体にあります。 ProtocolXxx 関数を登録するには、中間ドライバーが NdisRegisterProtocolDriver 関数を呼び出す必要があります。

DriverEntry は、ドライバーが NDIS 中間 ドライバーとして正常に登録された場合、STATUS_SUCCESS またはその同等の NDIS_STATUS_SUCCESS を返します。 DriverEntry が NdisXxx 関数またはカーネル モード サポート ルーチンによって返されたエラー状態を伝達することによって初期化に失敗した場合、ドライバーは再読み込みされません。 DriverEntry は同時に実行する必要があります。つまり、STATUS_PENDING またはその同等の NDIS_STATUS_PENDING を返すことはできません。

NDIS に中間ドライバーを登録するには、 DriverEntry ルーチンは、少なくとも次を満たす必要があります。

  • ドライバーの MiniportXxx 関数を登録する NDIS_INTERMEDIATE_DRIVER フラグを設定して、NdisMRegisterMiniportDriver 関数を呼び出します。
  • ドライバーが続いて基になる NDIS ドライバーにバインドする場合は、NdisRegisterProtocolDriver 関数を呼び出して、ドライバーの ProtocolXxx 関数を登録します。
  • NdisIMAssociateMiniport 関数を呼び出して、ドライバーのミニポートの上端とプロトコルの下端との間の関連付けについて NDIS に通知します。

NdisMRegisterMiniportDriver が正常に返された後に DriverEntry でエラーが発生した場合、ドライバーは DriverEntry が返される前に NdisMDeregisterMiniportDriver 関数を呼び出す必要があります。 DriverEntry が成功した場合、ドライバーは、MiniportDriverUnload 関数から NdisMDeregisterMiniportDriver を呼び出す必要があります。

中間ドライバーは、プロトコル ドライバーとミニポート ドライバーの DriverEntry 要件のほとんどを共有します。

中間ドライバーの仮想ミニポートの初期化は、ドライバーがその ProtocolBindAdapterEx 関数から NdisIMInitializeDeviceInstanceEx 関数を呼び出すときに発生します。

NDIS は、基になるすべてのミニポート ドライバーが初期化された後、ProtocolBindAdapterEx 関数を呼び出します。

実際には、NDIS 中間ドライバーの DriverEntry 関数は、NdisMRegisterMiniportDriver に渡した後、RegistryPath ポインターを無視できます。 このようなドライバーは、NdisMRegisterMiniportDriver に渡した後、DriverObject ポインターを無視することもできます。 ただし、ドライバーは、NdisMRegisterMiniportDriverHandleNdisMRegisterMiniportDriver によって返されるミニポート ドライバー ハンドル値と、NdisProtocolHandleNdisXxx 関数への後続の呼び出しのために NdisRegisterProtocolDriver によって返されるプロトコル ハンドル値を保存する必要があります。 中間ドライバーの ProtocolBindAdapterEx 関数は、中間ドライバーの仮想ミニポートを初期化する MiniportInitializeEx 関数が呼び出される前に、基になる各ミニポート ドライバーにドライバーをバインドします。 引き続き上位レベルのプロトコル ドライバーは、作成する仮想ミニポートに自分自身をバインドします。 この戦略では、NDIS 中間ドライバーがバインドされている基になるミニポート ドライバーの機能に従って、仮想ミニポートの作成時にリソースを割り当てることができます。