Поделиться через


Удаление виртуального удостоверения

Только клиент, ориентированный на подключение, диспетчер вызовов или драйвер MCM, который инициировал создание виртуального канала (VC), может инициировать удаление этого виртуального канала. Таким образом, клиент удаляет ранее созданный для исходящего вызова VC, диспетчер вызовов или драйвер MCM удаляет ранее созданный для входящего вызова по сети, а диспетчер звонков — ранее созданный для обмена сигнальными сообщениями по сети. (Драйвер MCM не вызывает NDIS для удаления виртуальной машины, созданной для обмена сигнальными сообщениями. Драйвер MCM удаляет такой VC с внутренней операцией, которая непрозрачна для NDIS.)

Клиент или диспетчер вызовов, ориентированный на подключение, инициирует удаление VC с помощью NdisCoDeleteVc.

На следующем рисунке показан клиент диспетчера вызовов, инициирующий удаление VC.

Схема: клиент диспетчера вызовов, инициирующий удаление VC.

На следующем рисунке показан клиент драйвера MCM, инициирующий удаление VC.

Схема, показывающая клиент драйвера MCM, инициирующего удаление VC.

На следующем рисунке показан диспетчер вызовов, инициирующий удаление VC.

Схема, показывающая диспетчера вызовов, инициирующего удаление VC.

Когда клиент или диспетчер вызовов вызывает NdisCoDeleteVc или когда драйвер MCM вызывает NdisMCmDeleteVc, в данном VC не должно быть невыполненных вызовов, и этот VC уже должен быть отключен. Чтобы выполнить эти требования, необходимо выполнить следующие условия:

Вызов клиента или диспетчера вызовов к NdisCoDeleteVc приводит к тому, что NDIS вызывает функцию MiniportCoDeleteVc базового драйвера miniportCoDeleteVc и функцию ProtocolCoDeleteVc клиента или диспетчера вызовов, с которой вызывающий объект использует NdisVcHandle (см. три предыдущие цифры).

MiniportCoDeleteVc освобождает все ресурсы, выделенные для VC, а также контекст драйвера минипорта для VC. ProtocolCoDeleteVc освобождает все ресурсы, используемые клиентом или диспетчером вызовов для выполнения операций и отслеживания состояния VC. MiniportCoDeleteVc и ProtocolCoDeleteVc являются синхронными функциями, которые не могут возвращать NDIS_STATUS_PENDING.

Драйвер MCM инициирует удаление виртуальной машины с помощью NdisMCmDeleteVc (см. следующий рисунок).

Схема, показывающая драйвер MCM, инициирующий удаление VC.

Вызов драйвера MCM к NdisMCmDeleteVc вызывает функцию ProtocolCoDeleteVc клиента, с которым драйвер MCM совместно использует NdisVcHandle .

Когда NdisCoDeleteVc или NdisMCmDeleteVc возвращает элемент управления, NdisVcHandle становится недействительным.