NDIS ミニポート ドライバーは、NdisMRegisterMiniportDriver にミニポートHaltEx 関数を提供する必要があります。
MiniportHaltEx は MiniportInitializeEx が行ったすべてを元に戻す必要があります。 たとえば、NDIS ミニポート ドライバーは次のような機能を持つことがあります。
空きポート。 (詳細については、「 NDIS ポートの解放」を参照してください)。
ミニポートInitializeEx 要求されたすべてのハードウェア リソースを解放します。
NdisMDeregisterInterruptEx を呼び出して、割り込みリソースを解放します。
MiniportInitializeEx が割り当てたすべてのメモリを解放します。
ミニポートShutdownEx 関数が既に NIC を初期状態に復元している場合を除き、NIC を停止します。
次の図は、ミニポート ドライバーのアンロードを示しています。
ミニポートHaltEx は、戻る前にドライバーをアンロードするために必要な操作を完了する必要があります。 ミニポート ドライバーに未完了の受信表示がある場合(つまり、NDIS に示されたが、NDIS がまだ返却していない受信ネットワーク データ)、そのようなデータがミニポート ドライバーのミニポートReturnNetBufferLists 関数に返されるまで、ミニポートHaltEx は戻ってはなりません。
上の図は、 ミニポートHaltEx 関数によって実行できる一連の呼び出しを示しています。 これらの呼び出しは、実行できる呼び出しのサブセットにすぎません。 呼び出しの実際のセットは、ミニポート ドライバーの以前のアクションに依存します。 ミニポート ドライバーは、ハードウェアの問題のため、または必要なリソースを取得できないためにネットワーク アダプターを正常に初期化できない場合、ミニポート ドライバーは 、ミニポートInitializeEx でこれらの同じ呼び出しを行うことができます。 このような場合、 ミニポートInitializeEx は、前のアクションを元に戻すことによって、ドライバーをアンロードする必要があります。 それ以外の場合、MiniportHaltEx は MiniportInitializeEx の処理を元に戻します。
次の一覧では、ミニポート ドライバーが実行する可能性がある特定のアクションを元に戻すために必要な呼び出しについて説明します。
ミニポート ドライバーが割り込みを登録した場合は、 NdisMDeregisterInterruptEx を呼び出す必要があります。
ミニポート ドライバーがタイマーまたはタイマーを設定する場合は、作成したタイマーごとに NdisCancelTimerObject を呼び出す必要があります。 NdisCancelTimerObject の呼び出しが失敗した場合、タイマーが既に作動している可能性があります。 この場合、ミニポート ドライバーは、 ミニポートHaltEx から返される前に、タイマー ハンドラーが完了するまで待機する必要があります。
ミニポート ドライバーが NdisAllocateMemoryWithTagPriority を使用してメモリを割り当てた場合は、 NdisFreeMemory を呼び出してそのメモリを解放する必要があります。
ミニポート ドライバーが NdisMAllocateSharedMemory または NdisMAllocateSharedMemoryAsyncEx を使用してメモリを割り当てた場合は、そのメモリを解放するために NdisMFreeSharedMemory を呼び出す必要があります。
ミニポート ドライバーが割り当てられ、 NdisAllocateNetBufferPool を使用してパケット記述子のプールの記憶域を初期化する場合は、その記憶域を解放する NdisFreeNetBufferPool を呼び出す必要があります。
ミニポート ドライバーが割り当てられているか、ハードウェア リソースを予約した場合は、これらを返す必要があります。 たとえば、ミニポート ドライバーが NIC の I/O ポート範囲をマップした場合、 NdisMDeregisterIoPortRange を呼び出してポートを解放する必要があります。
関連トピック
ミニポート ドライバー のアダプターの状態を
NDIS ポート を解放する
ミニポート アダプターの を停止する
ミニポート アダプターの状態と操作 の