Деактивация VC
Диспетчер вызовов вызывает NdisCmDeactivateVc в качестве важного шага при закрытии исходящего или входящего вызова, как правило, после обмена пакетами с сетевыми компонентами, которые разрывают вызов (см. статьи Инициированный клиентом запрос на закрытие звонка и входящий запрос на закрытие звонка). Драйвер MCM делает то же самое, вызывая NdisMCmDeactivateVc.
Вызов NdisCmDeactivateVc приводит к тому, что NDIS вызывает функцию MiniportCoDeactivateVc базового драйвера miniportCoDeactivateVc (см. следующий рисунок). MiniportCoDeactivateVc взаимодействует со своим сетевым адаптером, чтобы завершить весь обмен данными в этом сетевом интерфейсе (например, очистка буферов приема или отправки на адаптере).
Перед отключением VC драйвер минипорта должен выполнить все ожидающие передачи на VC. То есть драйвер мини-порта должен дождаться завершения всех выполняющихся отправк и пока ему не будут возвращены все указанные ему пакеты получения. После деактивации VC драйвер минипорта не может указывать на получение или передачу отправки в VC.
Обратите внимание, что MiniportCoDeactivateVc не удаляет VC. Создатель (клиент, диспетчер вызовов или драйвер MCM) определенного виртуального удостоверения, который не будет использоваться повторно, вызывает NdisCoDeleteVc для уничтожения этого VC. Деактивированный VC может быть повторно активирован клиентом, ориентированным на подключение, диспетчером вызовов или драйвером MCM.
MiniportCoDeactivateVc может выполняться синхронно или асинхронно. Вызов NdisMCoDeactivateVcComplete. вызывает NDIS для вызова функции ProtocolCmDeactivateVcComplete диспетчера вызовов, который первоначально запросил деактивацию VC. Завершение деактивации означает, что все параметры вызова для VC, используемые при активации, становятся недействительными. Дальнейшее использование VC запрещено, за исключением повторной активации с новым набором параметров вызова.
Вызов драйвера MCM к NdisMCmDeactivateVc сообщает NDIS о том, что он отключил VC или изменил параметры вызова в установленном VC (см. следующий рисунок). NDIS завершает последовательность деактивации, вызывая функцию ProtocolCmDeactivateVcComplete драйвера MCM.
Драйвер MCM не вызывает NdisMCmDeactivateVc для деактивации виртуальных компьютеров, используемых для обмена сигнальными сообщениями между драйвером MCM и сетевыми компонентами, такими как коммутатор. Драйвер MCM внутренне деактивирует сигнальную VC без вызова функции NdisXxx .