中間ドライバーのミニポート ドライバーとしての登録
中間ドライバーは、NdisMRegisterMiniportDriver を呼び出して、MiniportXxx 関数をエクスポートします。 NdisMRegisterMiniportDriver によって返される NdisMiniportDriverHandle は、ドライバーが NdisIMInitializeDeviceInstanceEx を呼び出すときに、中間ドライバーと NDIS への入力によって保持される必要があります。
中間ドライバーは、次の処理を実行する必要があります。
NdisZeroMemory を使用して NDIS_MINIPORT_DRIVER_CHARACTERISTICS 構造をゼロ初期化します。
必須の MiniportXxx 関数のアドレスと、ドライバーがエクスポートする省略可能な MiniportXxx 関数を格納します。
NDIS 6.0 機能をサポートする中間ドライバーは、バージョン 6.0 ミニポート ドライバーとして登録する必要があります。 ミニポート ドライバーのバージョン番号の指定について詳しくは、NDIS_MINIPORT_DRIVER_CHARACTERISTICS をご覧ください。
MiniportCharacteristics の次のエントリは、関数が省略可能であり、エクスポートされない限り、有効な MiniportXxx 関数アドレスに設定する必要があります。 ドライバーが関数をエクスポートしない場合、アドレスを NULL に設定します。
SetOptionsHandler
MiniportSetOptions は省略可能な関数です。 NDIS は、中間ドライバーが省略可能なハンドラーを指定できるよう MiniportSetOptions を呼び出します。
InitializeHandlerEx
NDIS は、NdisIMInitializeDeviceInstanceEx を呼び出す中間ドライバーの結果として MiniportInitializeEx を呼び出し、初期化される仮想ミニポートのミニポート アダプター操作を初期化します。
HaltHandlerEx
MiniportHaltEx は必須の関数です。 NDIS は、中間ドライバーが公開されている仮想ミニポート デバイスが無効化または停止された場合、または NdisIMDeInitializeDeviceInstance と呼ばれる中間ドライバーが削除を開始した場合、MiniportHaltEx を呼び出します。
UnloadHandler
MiniportDriverUnload は必須の関数です。 NDIS は、MiniportDriverUnload を呼び出して中間ドライバーをアンロードします。
PauseHandler
MiniportPause は、必須の関数です。 NDIS は MiniportPause を呼び出し、中間ドライバーの指定された仮想ミニポートを通じてネットワーク データのフローを停止します。
RestartHandler
MiniportRestart は、必須の関数です。 NDIS は、MiniportRestart を呼び出し、中間ドライバーの指定された仮想ミニポートを通じてネットワーク データのフローを再起動します。
OidRequestHandler
MiniportOidRequest は、NdisOidRequest または NDIS から呼び出された上位のドライバーから送信された OID_XXX 要求を受け取ります。 中間ドライバーは、要求を処理するか、基になるミニポート ドライバーに渡す可能性があります。
SendNetBufferListsHandler
MiniportSendNetBufferLists は、ネットワーク経由で送信するネットワーク データを指定する NET_BUFFER_LIST 構造への 1 つ以上のポインターの配列を受け取ります。 すべての中間ドライバーは、MiniportSendNetBufferLists 関数を提供する 必要があります。 詳しくは、「中間ドライバーを通じたネットワーク データの送信」をご覧ください。
ReturnNetBufferListsHandler
MiniportReturnNetBufferLists は、NdisMIndicateReceiveNetBufferLists を呼び出すことによって、以前に上位レベルのドライバーに示された返された NET_BUFFER_LIST 構造を受け取ります。 NdisMIndicateReceiveNetBufferLists の呼び出しは、上位レベルのドライバーに示されているリソースの制御を放棄します。 上位レベルのドライバーが各インジケーターを使用すると、NET_BUFFER_LIST 構造が割り当てられた中間ドライバーと、それが記述しているリソースが MiniportReturnNetBufferLists 関数に返されます。
CancelSendHandler
MiniportCancelSend は必須の関数です。 NDIS は MiniportCancelSend を呼び出して送信要求を取り消します。
CheckForHangHandler
MiniportCheckForHangEx 中間ドライバーには必要ないため、このエントリ ポイントを NULL に設定する必要があります。
ResetHandlerEx
MiniportResetEx 中間ドライバーには必要ないため、このエントリ ポイントを NULL に設定する必要があります。
DevicePnPEventNotifyHandler
MiniportDevicePnPEventNotify 関数のエントリ ポイント。
ShutdownHandlerEx
MiniportShutdownEx は必須の関数です。 MiniportShutdownEx は、仮想ミニポートを初期状態に復元します (中間ドライバーの DriverEntry ルーチンが実行される前)。
CancelOidRequestHandler
MiniportCancelOidRequest は必須の関数です。 NDIS は、MiniportCancelOidRequest を呼び出して OID 要求を取り消します。
中間ドライバーには、実装固有の他の MiniportXxx 関数が必要となる可能性があります。 省略可能な登録の詳細については、「オプションのミニポート ドライバー サービスの構成」を参照してください。
特定のミニポート ドライバー ハンドラー関数は、中間ドライバーによって提供されることはありません。 その理由としては、このようなドライバーが割り込みデバイスを管理しなていいか、発生した IRQL でバッファーが割り当てられていません。
注 中間ドライバーには、一時停止と再起動の機能が含まれている必要があります。 NDIS が基になるドライバー スタックを一時停止するとき、必要に応じて、仮想ミニポートの一時停止と再起動のサポートを含めます。 一時停止と再起動について詳しくは、「ドライバー スタック管理」をご覧ください。