次の方法で共有


中間ドライバー DriverEntry 関数

ローダーが適切に識別できるように、中間ドライバーが最初に必要なエントリ ポイントには、明示的に DriverEntry という名前を付ける必要があります。 このセクションで MiniportXxx および ProtocolXxx として説明されている他のすべてのエクスポートされたドライバー関数は、NDIS にアドレスとして渡されるため、ベンダーが指定した名前を持つことができます。

中間ドライバーでは、DriverEntry は、少なくとも次のことを行う必要があります。

  1. NdisMRegisterMiniportDriver を呼び出し、NdisMiniportDriverHandle パラメーターで返されるハンドルを保存します。

  2. NdisRegisterProtocolDriver を呼び出して、ドライバーが基になる NDIS ドライバーにバインドする場合は、ドライバーの ProtocolXxx 関数を登録します。

  3. NdisIMAssociateMiniport を呼び出して、ドライバーのミニポートの上端とプロトコルの下端の間の関連付けについて NDIS に通知します。

中間ドライバーは、MiniportDriverUnload アンロード ハンドラーを登録する必要があります。 このアンロード ハンドラーは、システムが中間ドライバーをアンロードするときに呼び出されます。 DriverEntry が失敗した場合、このアンロード ハンドラーは呼び出されず、代わりにドライバーがアンロードされます。 アンロード ハンドラーの詳細については、「中間ドライバーのアンロード」を参照してください。

アンロード ハンドラーは、NdisDeregisterProtocolDriver を呼び出して、中間ドライバーのプロトコル部分の登録を解除する必要があります。 アンロード ハンドラーは、ドライバーのプロトコル部分で使用されるリソースの再割り当てなど、必要なクリーンアップ操作も実行する必要があります。

アンロード ハンドラーは MiniportHaltEx 関数とは異なり、アンロード ハンドラーはよりグローバルなスコープを持ち、関数のスコープは MiniportHaltEx 特定のミニポート アダプターに制限されます。 中間ドライバーは、バインドされている基になる各ミニポート ドライバーが停止したときに、状態情報をクリーンアップし、リソースを再割り当てする必要があります。 仮想ミニポートの停止操作の処理については、「仮想ミニポートの停止」を参照してください。

ProtocolUninstall はオプションのアンロード ハンドラーです。 この関数のエントリ ポイントを、NdisRegisterProtocolDriver に渡す ProtocolCharacteristics 構造体に登録します。 NDIS は、中間ドライバーをアンインストールするユーザー要求に応答して ProtocolUninstall を呼び出します。 NDIS は、バインドされたアダプターごとに ProtocolUnbindAdapterEx を呼び出し、NDIS は ProtocolUninstall を呼び出します。 このハンドラーは、システムが実際にドライバーをアンロードする前に呼び出されます。 このタイミングは、システムが NdisMRegisterMiniportDriver に登録されているアンロード ハンドラーを呼び出し、ドライバーをアンロードするのを妨げる可能性があるデバイス オブジェクトまたはその他のリソースを解放する機会を提供します。

DriverEntry は、スピン ロックを初期化して、中間ドライバーが割り当てるグローバル共有リソース (状態変数、構造体、メモリなど) を保護できます ドライバーは、これらのリソースを使用して、接続を追跡し、進行中の送信またはドライバーが割り当てたキューを追跡します。

DriverEntry がネットワーク I/O 操作を実行するために必要なリソースの割り当てに失敗した場合は、以前に割り当てられたリソースを解放し、適切なエラー状態を返す必要があります。

次のトピックでは、中間ドライバーを登録する方法について詳しく説明します。

NDIS 中間ドライバーとしての登録

中間ドライバーのミニポート ドライバーとしての登録

中間ドライバーをプロトコル ドライバーとして登録する