VC の削除
仮想回線 (VC) の作成を開始した接続指向のクライアント、Call Manager、または MCM ドライバーのみが、その VC の削除を開始できます。 そのため、クライアントは、発信用に以前に作成した VC を削除し、Call Manager または MCM ドライバーは、ネットワーク経由で着信用に以前に作成した VC を削除し、Call Manager は、ネットワーク経由で信号メッセージを交換するために以前に作成した VC を削除します。 (MCM ドライバーは、信号メッセージを交換するために作成した VC を削除する NDIS を呼び出しません。MCM ドライバーは、NDIS への不透明な内部操作でこのような VC を削除します。)
接続指向のクライアントまたは Call Manager は、NdisCoDeleteVc を使用して VC の削除を開始します。
次の図は、VC の削除を開始する Call Manager のクライアントを示しています。
次の図は、VC の削除を開始する MCM ドライバーのクライアントを示しています。
次の図は、VC の削除を開始する Call Manager を示しています。
クライアントまたは Call Manager が NdisCoDeleteVc を呼び出す時、または MCM ドライバーが NdisMCmDeleteVc を呼び出す時は、指定された VC に未処理の呼び出しがなくその VC がすでに 非アクティブ化 されている必要があります。 これらの要件を満たす場合、次の条件が満たされていることを意味します。
クライアントは、指定された NdisVcHandle で NdisClCloseCall をすでに呼び出しており、その 終了呼び出し要求 が正常に完了しました。
Call Manager はすでに NdisCmDeactivateVc を呼び出しているか、MCM ドライバーは、指定された NdisVcHandle で NdisMCmDeactivateVc をすでに呼び出しており、非アクティブ化要求が正常に完了しました (呼び出しを閉じる着信要求を参照)。
クライアントまたは Call Manager が NdisCoDeleteVc を呼び出すと、NDIS は基になるミニポート ドライバーの MiniportCoDeleteVc 関数と、呼び出し元が NdisVcHandle を共有するするクライアントまたは Call Manager の ProtocolCoDeleteVc 関数の両方を呼び出します (上の 3 つの図を参照)。
MiniportCoDeleteVc は、VC に割り当てられているすべてのリソースと、VC のミニポート ドライバーのコンテキストを解放します。 ProtocolCoDeleteVc は、VC の操作を実行して状態を追跡するためにクライアントまたは Call Manager が使用したすべてのリソースを解放します。 MiniportCoDeleteVc と ProtocolCoDeleteVc はどちらも NDIS_STATUS_PENDING を返すことができない同期関数です。
MCM ドライバーは NdisMCmDeleteVc を使用して VC の削除を開始します (次の図を参照してください)。
MCM ドライバーの NdisMCmDeleteVc の呼び出しにより、NDIS は、MCM ドライバーが NdisVcHandle を共有したクライアントの ProtocolCoDeleteVc 関数を呼び出します。
NdisCoDeleteVc または NdisMCmDeleteVc がコントロールを返すと、NdisVcHandle は無効になります。