Удаление участника из многоточечных вызовов
Клиент, ориентированный на подключение, который выступает в качестве корня многоточечных вызовов, должен в конечном итоге удалить каждую сторону из этого вызова с помощью NdisClDropParty или NdisClCloseCall.
Клиент удаляет сторону из звонка в следующих ситуациях:
Перед инициализацией удаления многоточечных вызовов с помощью NdisCloseCall (см. раздел Инициированный клиентом запрос на закрытие звонка), клиент должен удалить все стороны, кроме последней, с последовательными вызовами NdisClDropParty. Клиент указывает последнюю сторону для удаления из вызова с помощью NdisCloseCall.
В ответ на запрос удаленной стороны на удаление из многоточечных вызовов (см. раздел Входящие запросы на удаление стороны из многоточечных вызовов) клиент из своей функции ProtocolClIncomingDropParty вызывает NdisClDropParty.
Вызов клиента к NdisClDropParty приводит к тому, что NDIS вызывает функцию ProtocolCmDropParty диспетчера вызовов или драйвера MCM, который совместно использует один и тот же NdisVcHandle для многоточечных VC.
На следующем рисунке показан клиент диспетчера вызовов, запрашивающий удалить сторону из многоточечных вызовов.
На следующем рисунке показан клиент драйвера MCM, запрашивающего удалить сторону из многоточежного вызова.
ProtocolCmDropParty взаимодействует с устройствами управления сетью, чтобы удалить сторону из существующего многоточечных вызовов. NDIS может передать ProtocolCmDropParty указатель на буфер, содержащий данные (предоставленные клиенту в вызове NdisClDropParty). ProtocolCmDropParty должен отправлять такие данные по сети перед разрывом подключения.
ProtocolCmDropParty может выполняться синхронно или, что более вероятно, асинхронно с NdisCmDropPartyComplete в случае диспетчера вызовов или NdisMCmDropPartyComplete в случае драйвера MCM.
Вызов Ndis(M)CmDropPartyComplete вызывает функцию ProtocolClDropPartyComplete клиента. Если клиент находится в процессе удаления созданной им многоточеевой виртуальной машины, ProtocolClDropPartyComplete может вызвать NdisClDropPartyParty с любым допустимым NdisPartyHandle одной из оставшихся сторон в активном многоточеном VC клиента. Если в VC с несколькими точками остается только одна сторона, клиент должен удалить ее, передав NdisPartyHandleв NdisCloseCall (см. запрос на закрытие вызова, инициированный клиентом).