VC 비활성화
호출 관리자는 일반적으로 호출을 중단하는 네트워크 구성 요소와 패킷 교환 후 발신 또는 수신 통화를 닫는 필수 단계로 NdisCmDeactivateVc 를 호출합니다( 클라이언트가 시작한 통화 닫기 요청 및 통화 닫기 요청 참조). MCM 드라이버는 NdisMCmDeactivateVc를 호출하여 동일한 작업을 수행합니다.
NdisCmDeactivateVc를 호출하면 NDIS가 기본 미니포트 드라이버의 MiniportCoDeactivateVc 함수를 호출합니다(다음 그림 참조). MiniportCoDeactivateVc 는 네트워크 어댑터와 통신하여 이 VC에서 모든 통신을 종료합니다(예: 어댑터에서 수신 또는 송신 버퍼 지우기).
VC를 비활성화하기 전에 미니포트 드라이버는 VC에서 보류 중인 모든 전송을 완료해야 합니다. 즉, 미니포트 드라이버는 진행 중인 모든 보내기가 완료될 때까지 기다렸다가 표시된 모든 수신 패킷이 반환될 때까지 기다려야 합니다. VC를 비활성화한 후 미니포트 드라이버는 VC에서 수신 또는 전송 송신을 나타낼 수 없습니다.
MiniportCoDeactivateVc는 VC를 삭제하지 않습니다. 재사용되지 않을 특정 VC의 작성자(클라이언트, 호출 관리자 또는 MCM 드라이버)는 NdisCoDeleteVc 를 호출하여 해당 VC를 삭제합니다. 연결 지향 클라이언트, 통화 관리자 또는 MCM 드라이버에서 비활성화된 VC를 다시 활성화 할 수 있습니다.
MiniportCoDeactivateVc 는 동기적으로 또는 비동기적으로 완료할 수 있습니다. NdisMCoDeactivateVcComplete에 대한 호출입니다. 는 NDIS가 원래 VC 비활성화를 요청한 호출 관리자의 ProtocolCmDeactivateVcComplete 함수를 호출하도록 합니다. 비활성화가 완료되면 활성화에 사용된 VC에 대한 모든 호출 매개 변수가 더 이상 유효하지 않습니다. VC의 추가 사용은 새 호출 매개 변수 집합으로 다시 활성화하는 것을 제외하고는 금지됩니다.
MCM 드라이버가 NdisMCmDeactivateVc를 호출하면 VC가 비활성화되었거나 설정된 VC에서 호출 매개 변수가 변경되었음을 NDIS에 알릴 수 있습니다(다음 그림 참조). NDIS는 MCM 드라이버의 ProtocolCmDeactivateVcComplete 함수를 호출하여 비활성화 시퀀스를 완료합니다.
MCM 드라이버는 MCM 드라이버와 스위치와 같은 네트워크 구성 요소 간에 신호 메시지를 교환하는 데 사용되는 VC를 비활성화하기 위해 NdisMCmDeactivateVc 를 호출하지 않습니다. MCM 드라이버는 NdisXxx 함수를 호출하지 않고 내부적으로 신호 VC를 비활성화합니다.