VC の非アクティブ化
呼び出しマネージャーは、送信または着信呼び出しを閉じるのに不可欠な手順として NdisCmDeactivateVc を呼び出します。通常は、呼び出しを破棄するネットワーク コンポーネントとのパケット交換の後です ( 呼び出しを閉じるクライアントが開始した要求と通話を閉じる着信要求を参照)。 MCM ドライバーは、 NdisMCmDeactivateVcを呼び出すことによって同じことを行います。
NdisCmDeactivateVc への呼び出しにより、NDIS は基になるミニポート ドライバーのミニポートCoDeactivateVc 関数を呼び出します (次の図を参照してください)。 MiniportCoDeactivateVc は、ネットワーク アダプターと通信して、この VC 間のすべての通信を終了します (たとえば、アダプターの受信バッファーまたは送信バッファーをクリアします)。
VC を非アクティブ化する前に、ミニポート ドライバーは VC で保留中の転送を完了する必要があります。 つまり、ミニポート ドライバーは、進行中のすべての送信が完了し、指定したすべての受信パケットが返されるまで待機する必要があります。 VC を非アクティブ化した後、ミニポート ドライバーは VC で送信の受信または送信を示すことができません。
ミニポートCoDeactivateVc は VC を削除しないことに注意してください。 再利用されない特定の VC の作成者 (クライアント、コール マネージャー、または MCM ドライバー) は、NdisCoDeleteVcを呼び出して、その VC を破棄します。 非アクティブ化された VC は 、接続指向クライアント、呼び出しマネージャー、または MCM ドライバーによって再アクティブ化 できます。
MiniportCoDeactivateVc は、同期的または非同期的に完了できます。 NdisMCoDeactivateVcComplete の呼び出し。 では、NDIS は、最初に VC 非アクティブ化を要求した呼び出しマネージャーの ProtocolCmDeactivateVcComplete 関数を呼び出します。 非アクティブ化が完了すると、アクティブ化に使用される VC のすべての呼び出しパラメータが無効になります。 VC のそれ以上の使用は、新しい呼び出しパラメーターのセットで再アクティブ化する場合を除き、禁止されています。
NdisMCmDeactivateVc に対する MCM ドライバーの呼び出しは、VC を非アクティブ化したか、確立された VC の呼び出しパラメーターを変更したことを NDIS に通知します (次の図を参照)。 NDIS は、MCM ドライバーの ProtocolCmDeactivateVcComplete 関数を呼び出すことによって、非アクティブ化シーケンスを完了します。
MCM ドライバーは、NdisMCmDeactivateVc を呼び出して、MCM ドライバーとスイッチなどのネットワーク コンポーネントの間でシグナリング メッセージを交換するために使用される VC を非アクティブ化しません。 MCM ドライバは、NdisXxx 関数を呼び出さずに、シグナリング VC を内部的に非アクティブにします。