CoNDIS TAPI のシャットダウン
TAPI セッションは、CoNDIS WAN ミニポート ドライバーが TAPI 機能をアプリケーションに列挙した後に開始されます。 セッション内では、複数の回線を開き、複数呼び出しを確立できます。 回線が開いている間に、多くの呼び出しを確立したり、閉じたり削除したりすることができます。 セッション中に、複数の回線の開閉を何度も切り替えることができます。 ミニポート ドライバーがこのような遷移を処理する方法については、このセクションで説明します。
通話を終了する
インプロセス呼び出しは、ローカル ノードまたはリモート ノードによって閉じることができます。 呼び出しは、呼び出しのハンドルを持つ最後のアプリケーションがハンドルを閉じるか、ミニポート ドライバーの MiniportHaltEx または MiniportResetEx が呼び出すことで、ローカル ノードで閉じることができます。 リモート ノードがインプロセス呼び出しをハングアップした場合、ミニポート ドライバーは、呼び出しを破棄する上位層に通知する必要があります。
ローカル ノード上のアプリケーションが呼び出しを閉じる場合は、呼び出しを切断する必要があります。 呼び出しは、アプリケーションが TAPI lineDrop 関数を呼び出した結果として切断されます。 この TAPI 関数呼び出しにより、NDPROXY ドライバーは NdisClCloseCall 関数を呼び出し、呼び出しの VC を表すハンドルを渡します。 NDIS は、CoNDIS WAN ミニポート ドライバーの ProtocolCmCloseCall 関数を呼び出します。 ミニポート ドライバーが NdisClCloseCall を非同期的に完了できるように、ミニポート ドライバーは NDPROXY にNDIS_STATUS_PENDINGを返す必要があります。
ミニポート ドライバーの ProtocolCmCloseCall は、ローカル ノードとリモート ノード間の接続を終了するために、ネットワーク制御デバイスと通信する必要があります。 ミニポート ドライバーは、呼び出しに 使用される VC の非アクティブ化を開始する NdisMCmDeactivateVc 関数を呼び出す必要があります。
ミニポート ドライバーが接続を終了した後、その ProtocolCmCloseCall は呼び出しクロージャを完了する NdisMCmCloseCallComplete 関数を呼び出すことができます。
リモート ノードがプロセス内呼び出しをハングアップした場合、ミニポート ドライバーは NdisCmDispatchIncomingCloseCall 関数を呼び出して、NDISWAN と NDPROXY に着信呼び出しを破棄するよう通知します。
回線のクローズ
回線へのハンドルが開いている最後のアプリケーションがハンドルを閉じた場合、回線は閉じられます。 アプリケーションで TAPI lineClose 関数を呼び出すと回線が閉じられます。 この TAPI 関数呼び出しにより、前のセクションで説明したように、NDPROXY ドライバーは、その回線のすべての呼び出しの終了を開始します。 ミニポート ドライバーは、これらの呼び出しを削除し、その状態をクリーンアップする必要があります。
セッションのクローズ
セッションの終了は、上位レイヤーまたは CoNDIS WAN ミニポート ドライバーによって開始できます。 最後のクライアント プロセスが上位レベルのテレフォニー モジュールからデタッチされると、NDPROXY ドライバーは、登録されている各アダプターとのセッションを終了する必要があることを通知されます。 これを行うには、NDPROXY ドライバーは NdisClCloseAddressFamily 関数を呼び出し、TAPI アドレス ファミリにハンドルを渡します。 NDIS は、ミニポート ドライバーの ProtocolCmCloseAf 関数を呼び出します。 ミニポート ドライバーは、指定されたアダプターで進行中のすべての関連アクティビティを終了し、関連するリソースを解放する必要があります。 NdisClCloseAddressFamily を呼び出した後、クライアントは TAPI アドレス ファミリへのハンドルが無効であると見なす必要があります。
ミニポート ドライバーが MiniportHaltEx 関数でアンロードされている場合、ドライバーによって開始されるセッションの終了が発生する可能性があります。 通常、ミニポート ドライバーは、未処理の NDPROXY 要求を完了し、すべての呼び出しが終了していることを NDISWAN に通知します。 ミニポート ドライバーが後で再び再読み込みされた場合は、前に説明したものと同じ初期化プロセスが実行されます。
CoNDIS WAN ミニポート ドライバーは、すべてのクライアントとドライバーの完全な再初期化を必要とするいくつかの動的な再構成を受けた場合も、セッションの終了を開始する可能性があります。 たとえば、アダプターの回線デバイス モデリング (サポートされている回線デバイスの数など) が、その場で変更された場合です。