TAPI 세션은 CoNDIS WAN 미니포트 드라이버가 TAPI 기능을 애플리케이션에 열거한 후에 시작됩니다. 세션 내에서 하나 이상의 줄을 열 수 있으며 하나 이상의 호출을 설정할 수 있습니다. 회선이 열려 있는 동안 많은 호출을 설정한 다음 닫거나 끊을 수 있습니다. 세션 중에 하나 이상의 줄이 여러 번 열린 줄에서 닫힌 행으로 전환할 수 있습니다. 미니포트 드라이버가 이러한 전환을 처리하는 방법은 이 섹션에서 설명합니다.
통화 닫기
In-Process 호출은 로컬 노드 또는 원격 노드에서 닫을 수 있습니다. 호출 핸들이 있는 마지막 애플리케이션이 핸들을 닫았거나, 아니면 아마도 미니포트 드라이버의 MiniportHaltEx 혹은 MiniportResetEx이 호출되었기 때문에 지역 노드에서 호출을 닫을 수 있습니다. 원격 노드가 In-Process 호출을 중단하는 경우 미니포트 드라이버는 상층부에 호출을 중단하도록 알려야 합니다.
로컬 노드의 애플리케이션이 호출을 닫으면 호출의 연결을 끊어야 합니다. TAPI lineDrop 함수를 호출하는 애플리케이션의 결과로 호출의 연결이 끊어집니다. 이 TAPI 함수 호출은 NDPROXY 드라이버가 NdisCloseCall 함수를 호출하고 호출에 대한 VC를 나타내는 핸들을 전달하도록 합니다. NDIS는 차례로 CoNDIS WAN 미니포트 드라이버의 ProtocolCmCloseCall 함수를 호출합니다. 미니포트 드라이버는 miniport 드라이버가 비동기적으로 NdisCloseCall 완료할 수 있도록 NDIS_STATUS_PENDING NDPROXY로 반환해야 합니다.
미니포트 드라이버의 ProtocolCmCloseCall 네트워크 제어 디바이스와 통신하여 로컬 노드와 원격 노드 간의 연결을 종료해야 합니다. 그런 다음 미니포트 드라이버는 NdisMCmDeactivateVc 함수를 호출하여 호출에 사용되는 VC의 비활성화를 시작해야 합니다.
미니포트 드라이버가 연결을 종료하면 ProtocolCmCloseCallNdisMCmCloseCallComplete 함수를 호출하여 호출 닫기를 완료할 수 있습니다.
원격 노드가 in-process 호출을 중단하면 미니포트 드라이버는 NdisCmDispatchIncomingCloseCall 함수를 호출하여 NDISWAN 및 NDPROXY에 수신 전화를 중단하도록 알릴 수 있습니다.
줄 닫기
핸들이 열린 채로 줄에 연결된 마지막 애플리케이션이 핸들을 닫으면 줄이 닫힙니다. TAPI lineClose 함수를 호출하는 애플리케이션의 결과로 줄이 닫힙니다. 이 TAPI 함수 호출은 NDPROXY 드라이버가 이전 섹션에 설명된 대로 해당 줄에 대한 모든 호출의 닫기를 시작하도록 합니다. 미니포트 드라이버는 해당 호출을 삭제하고 상태를 정리해야 합니다.
세션 닫기
세션 종료는 상위 계층 또는 CoNDIS WAN 미니포트 드라이버에서 시작할 수 있습니다. 마지막 클라이언트 프로세스가 상위 수준 전화 통신 모듈에서 분리된 후 NDPROXY 드라이버는 등록된 각 어댑터로 세션을 종료해야 한다는 알림이 표시됩니다. 이를 위해 NDPROXY 드라이버는 NdisCloseAddressFamily 함수를 호출하고 TAPI 주소 패밀리에 핸들을 전달합니다. NDIS는 미니포트 드라이버의 ProtocolCmCloseAf 함수를 호출합니다. 미니포트 드라이버는 지정된 어댑터에서 진행 중인 모든 관련 활동을 종료하고 관련 리소스를 해제해야 합니다. NdisClCloseAddressFamily호출한 후 클라이언트는 TAPI 주소 계열에 대한 핸들이 잘못된 것으로 간주해야 합니다.
미니포트 드라이버가 MiniportHaltEx 함수에서 언로드되는 경우 드라이버 시작 세션 종료가 발생할 수 있습니다. 일반적으로 미니포트 드라이버는 미해결 NDPROXY 요청을 완료하고 모든 호출이 닫히고 있음을 NDISWAN에 알립니다. 미니포트 드라이버가 나중에 다시 로드된 경우 앞에서 설명한 것과 동일한 초기화 프로세스를 거치게 됩니다.
CoNDIS WAN 미니포트 드라이버는 모든 클라이언트와 드라이버의 완전한 다시 초기화가 필요한 일부 동적 재구성을 거친 경우에도 세션 종료를 시작할 수 있습니다. 예를 들어 어댑터의 라인 디바이스 모델링(예: 지원되는 라인 디바이스 수)이 즉석에서 변경된 경우입니다.