CoNDIS TAPI 종료

TAPI 세션은 CoNDIS WAN 미니포트 드라이버가 TAPI 기능을 애플리케이션에 열거한 후에 시작됩니다. 세션 내에서 하나 이상의 줄을 열고 하나 이상의 호출을 설정할 수 있습니다. 회선이 열려 있는 동안 많은 호출을 설정한 다음 닫거나 끊을 수 있습니다. 세션 중에 하나 이상의 줄이 열린 줄에서 닫힌 줄로 여러 번 전환할 수 있습니다. 미니포트 드라이버가 이러한 전환을 처리하는 방법은 이 섹션에 설명되어 있습니다.

통화 닫기

In-Process 호출은 로컬 노드 또는 원격 노드에서 닫을 수 있습니다. 호출에 대한 핸들이 있는 마지막 애플리케이션이 핸들을 닫았거나 미니포트 드라이버의 MiniportHaltEx 또는 MiniportResetEx 가 호출되었기 때문에 로컬 노드에서 호출을 닫을 수 있습니다. 원격 노드가 In-Process 호출을 중단하는 경우 미니포트 드라이버는 호출을 중단하도록 상위 계층에 알려야 합니다.

로컬 노드의 애플리케이션이 호출을 닫는 경우 호출의 연결을 끊어야 합니다. TAPI lineDrop 함수를 호출하는 애플리케이션의 결과로 호출의 연결이 끊어집니다. 이 TAPI 함수 호출은 NDPROXY 드라이버가 NdisCloseCall 함수를 호출하고 호출에 대한 VC를 나타내는 핸들을 전달하도록 합니다. NDIS는 차례로 CoNDIS WAN 미니포트 드라이버의 ProtocolCmCloseCall 함수를 호출합니다. 미니포트 드라이버는 NDIS_STATUS_PENDING NDPROXY로 반환해야 미니포트 드라이버가 NdisCloseCall 을 비동기적으로 완료할 수 있습니다.

미니포트 드라이버의 ProtocolCmCloseCall 은 로컬 노드와 원격 노드 간의 연결을 종료하기 위해 네트워크 제어 디바이스와 통신해야 합니다. 그런 다음 미니포트 드라이버는 NdisMCmDeactivateVc 함수를 호출하여 호출에 사용되는 VC의 비활성화를 시작해야 합니다.

미니포트 드라이버가 연결을 종료한 후 ProtocolCmCloseCallNdisMCmCloseCallComplete 함수를 호출하여 호출 닫기를 완료할 수 있습니다.

원격 노드가 In-process 호출을 중단하는 경우 미니포트 드라이버는 NdisCmDispatchIncomingCloseCall 함수를 호출하여 NDISWAN 및 NDPROXY에 들어오는 호출을 중단하도록 알릴 수 있습니다.

줄 닫기

줄에 열린 핸들이 있는 마지막 애플리케이션이 핸들을 닫으면 줄이 닫힙니다. TAPI lineClose 함수를 호출하는 애플리케이션의 결과로 줄이 닫힙니다. 이 TAPI 함수 호출은 이전 섹션에 설명된 대로 NDPROXY 드라이버가 해당 줄에 대한 모든 호출의 닫기를 시작하도록 합니다. 미니포트 드라이버는 해당 호출을 삭제하고 상태를 클린 합니다.

세션 닫기

세션 종료는 상위 계층 또는 CoNDIS WAN 미니포트 드라이버에서 시작할 수 있습니다. 마지막 클라이언트 프로세스가 상위 수준 전화 통신 모듈에서 분리된 후 NDPROXY 드라이버는 등록된 각 어댑터로 세션을 종료해야 한다는 통보를 받게 됩니다. 이를 위해 NDPROXY 드라이버는 NdisCloseAddressFamily 함수를 호출하고 핸들을 TAPI 주소 패밀리에 전달합니다. NDIS는 미니포트 드라이버의 ProtocolCmCloseAf 함수를 차례로 호출합니다. 미니포트 드라이버는 지정된 어댑터에서 진행 중인 모든 관련 활동을 종료하고 관련 리소스를 해제해야 합니다. NdisCloseAddressFamily를 호출한 후 클라이언트는 TAPI 주소 패밀리에 대한 핸들이 잘못된 것으로 간주해야 합니다.

Miniport 드라이버가 MiniportHaltEx 함수에서 언로드되는 경우 드라이버 시작 세션 종료가 발생할 수 있습니다. 일반적으로 미니포트 드라이버는 미해결 NDPROXY 요청을 완료하고 모든 호출이 닫히고 있음을 NDISWAN에 알립니다. 미니포트 드라이버가 나중에 다시 로드된 경우 이전에 설명한 것과 동일한 초기화 프로세스를 거칩니다.

CoNDIS WAN 미니포트 드라이버는 모든 클라이언트와 드라이버를 완전히 다시 초기화해야 하는 동적 재구성이 수행된 경우 세션 종료를 시작할 수도 있습니다. 예를 들어 어댑터의 라인 디바이스 모델링(예: 지원되는 라인 디바이스 수)이 즉석에서 변경된 경우입니다.