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


Завершение работы CONDIS TAPI

Сеанс TAPI начинается после того, как драйвер мини-порта CoNDIS WAN перечислит свои возможности TAPI для приложения. В рамках сеанса можно открыть одну или несколько строк и установить один или несколько вызовов. Во время открытия линии можно установить множество вызовов, а затем закрыть или удалить. Во время сеанса одна или несколько строк могут многократно переходить от открытого к закрытому. В этом разделе описано, как драйвер минипорта обрабатывает такие переходы.

Закрытие звонка

Внутрипроцессный вызов может быть закрыт локальным или удаленным узлом. Вызов может быть закрыт на локальном узле либо из-за того, что последнее приложение с дескриптором для вызова закрыло дескриптор, либо, возможно, потому, что был вызван miniportHaltEx или MiniportResetEx . Если удаленный узел зависает при внутрипроцессном вызове, драйвер мини-порта должен сообщить верхним слоям, чтобы он был удален.

Если приложение на локальном узле закрывает вызов, оно должно отключить вызов. Вызов отключается в результате того, что приложение вызывает функцию LINEDrop TAPI. Этот вызов функции TAPI приводит к тому, что драйвер NDPROXY вызывает функцию NdisCloseCall и передает дескриптор, представляющий VC для вызова. NDIS, в свою очередь, вызывает функцию ProtocolCmCloseCall драйвера мини-порта CoNDIS WAN. Драйвер мини-порта должен возвращать NDIS_STATUS_PENDING в NDPROXY, чтобы драйвер мини-порта смог выполнить NdisCloseCall асинхронно.

ПротоколCmCloseCall драйвера мини-порта должен взаимодействовать с устройствами управления сетью, чтобы завершить подключение между локальным и удаленным узлом. Затем драйвер мини-порта должен вызвать функцию NdisMCmDeactivateVc , чтобы инициировать деактивацию VC, используемого для вызова.

После того как драйвер минипорта завершит подключение, его ProtocolCmCloseCall может вызвать функцию NdisMCmCloseCallComplete , чтобы завершить закрытие вызова.

Если удаленный узел зависает во внутрипроцессном вызове, драйвер мини-порта вызывает функцию NdisCmDispatchIncomingCloseCall , чтобы сообщить NDISWAN и NDPROXY о том, что входящий вызов будет удален.

Закрытие строки

Строка закрывается, когда последнее приложение с открытым дескриптором для строки закрывает дескриптор. Строка закрывается в результате того, что приложение вызывает функцию TAPI lineClose . Этот вызов функции TAPI приводит к тому, что драйвер NDPROXY инициирует закрытие всех вызовов в этой строке, как описано в предыдущем разделе. Драйвер мини-порта должен отказаться от этих вызовов и очистить их состояние.

Закрытие сеанса

Завершение сеанса может инициироваться либо верхними уровнями, либо драйвером мини-порта CoNDIS WAN. После отсоединения последнего клиентского процесса от модуля телефонии более высокого уровня драйвер NDPROXY будет проинформирован о том, что он должен завершить сеанс с каждым зарегистрированным адаптером. Для этого драйвер NDPROXY вызывает функцию NdisCloseAddressFamily и передает дескриптор семейству адресов TAPI. NDIS, в свою очередь, вызывает функцию ProtocolCmCloseAf драйвера минипорта. Драйвер мини-порта должен завершить все связанные с ним действия с указанным адаптером и освободить все соответствующие ресурсы. После вызова NdisCloseAddressFamily клиент должен считать дескриптор семейства адресов TAPI недопустимым.

Инициированное драйвером завершение сеанса может произойти, если драйвер минипорта выгружается в его функции MiniportHaltEx . Как правило, драйвер мини-порта выполняет все невыполненные запросы NDPROXY и уведомляет NDISWAN о том, что все вызовы закрываются. Если драйвер miniport был перезагружен позже, он будет проходить тот же процесс инициализации, который описан ранее.

Драйвер мини-порта CoNDIS WAN также может инициировать завершение сеанса, если он подвергся динамической перенастройке, что потребовало полной повторной инициализации всех клиентов и драйверов. Например, если моделирование линейного устройства адаптера (например, количество поддерживаемых устройств линии) было изменено на лету.