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