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


Создание VC

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

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

Client-Initiated создание VC

Перед выполнением вызова с помощью NdisClMakeCall клиент, ориентированный на подключение, вызывает NdisCoCreateVc , чтобы инициировать создание VC.

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

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

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

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

Когда клиент диспетчера вызовов, ориентированный на подключение, вызывает NdisCoCreateVc, NDIS вызывает в качестве синхронной операции функцию ProtocolCoCreateVc диспетчера вызовов и функцию MiniportCoCreateVc базового драйвера мини-порта (см. первый рисунок в этой статье). NDIS передает NdisVcHandle , представляющий VC, как ProtocolCoCreateVc , так и MiniportCoCreateVc. Если вызов NdisCoCreateVc выполнен успешно, NDIS возвращает NdisVcHandleв NdisCoCreateVc.

ProtocolCoCreateVc выделяет и инициализирует все динамические ресурсы и структуры, необходимые диспетчеру вызовов для выполнения последующих операций с активируемым виртуальным удостоверением. MiniportCoCreateVc выделяет и инициализирует все ресурсы, необходимые драйверу мини-порта для поддержания сведений о состоянии виртуальной машины. Протоколы ProtocolCoCreateVc и MiniportCoCreateVc хранят NdisVcHandle .

При подключении клиента драйвера MCM вызов NdisCoCreateVc вызывает функцию ProtocolCoCreateVc драйвера MCM (см. Client-Initiated создание VC (наличие драйвера MCM)). В этом случае ProtocolCoCreateVc выполняет необходимое выделение и инициализацию ресурсов для VC. Вызов MiniportCoCreateVc (внутренний или иной) отсутствует, так как драйвер MCM не предоставляет такую функцию.

Вызов Manager-Initiated создание VC

Перед указанием входящего вызова клиента, ориентированного на подключение, с помощью NdisCmDispatchIncomingCall, диспетчер вызовов вызывает NdisCoCreateVc , чтобы инициировать создание VC (см. следующий рисунок).

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

Когда диспетчер вызовов вызывает NdisCoCreateVc, NDIS вызывает в качестве синхронной операции функцию ProtocolCoCreateVc клиента, ориентированного на подключение, который зарегистрировал SAP, на котором был получен вызов, а также функцию MiniportCoCreateVc базового мини-порта. NDIS передает NdisVcHandle , представляющий VC, как ProtocolCoCreateVc , так и MiniportCoCreateVc. Если вызов NdisCoCreateVc выполнен успешно, NDIS возвращает NdisVcHandleв NdisCoCreateVc.

McM Driver-Initiated Создание VC

Перед указанием входящего вызова клиента, ориентированного на подключение, с помощью NdisMCmDispatchIncomingCall, драйвер MCM вызывает NdisMCmCreateVc , чтобы инициировать создание VC (см. следующий рисунок).

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

Когда драйвер MCM вызывает NdisMCmCreateVc, NDIS вызывает как синхронную операцию перед возвратом NdisMCmCreateVc , функция ProtocolCoCreateVc клиента, ориентированного на подключение, который зарегистрировал SAP, в котором был получен вызов. NDIS передает NdisVcHandle , представляющий VC, в ProtocolCoCreateVc. Если вызов NdisMCmCreateVc выполнен успешно, NDIS возвращает NdisVcHandle в NdisMCmCreateVc.

ProtocolCoCreateVc выделяет и инициализирует все динамические ресурсы и структуры, необходимые клиенту для выполнения последующих операций с виртуальным удостоверением. ProtocolCoCreateVc также хранит NdisVcHandle .

Обратите внимание, что когда драйвер MCM создает VC для обмена сигнальными сообщениями с сетевым компонентом, он не использует вызовы NdisXxx для создания VC. Фактически драйвер MCM не использует вызовы NdisXxx для создания, активации, деактивации или удаления таких виртуальных машин. Вместо этого драйвер MCM выполняет эти операции внутри организации. Таким образом, такие VC непрозрачны для NDIS.