Функция NdisClCloseCall (ndis.h)

NdisClCloseCall запрашивает, чтобы вызов указанного VC был удален.

Синтаксис

NDIS_STATUS NdisClCloseCall(
  [in]           NDIS_HANDLE NdisVcHandle,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in, optional] PVOID       Buffer,
  [in]           UINT        Size
);

Параметры

[in] NdisVcHandle

Обработка в VC вызова, который закрывается или отключается. Этот дескриптор был предоставлен NDIS при первоначальном создании VC с помощью NdisCoCreateVc, будь то клиентом при подготовке к исходящему вызову или диспетчером вызовов при подготовке к отправке входящего вызова клиенту.

[in, optional] NdisPartyHandle

Дескриптор до последней стороны, удаляемой в многоточечный VC или NULL. Если это многоточечный VC, клиент получил этот дескриптор из предыдущего вызова NdisClMakeCall или NdisClAddParty.

[in, optional] Buffer

Указатель на буфер, выделенный вызывающим объектом, содержащий любые данные, передаваемые стороне на удаленном узле при закрытии соединения. В зависимости от базового носителя этот указатель может иметь значение NULL.

[in] Size

Указывает размер (в байтах) в буфере, ноль, если параметр Buffer имеет значение NULL.

Возвращаемое значение

Когда NdisClCloseCall возвращает что-либо, кроме NDIS_STATUS_PENDING, клиент должен выполнить внутренний вызов Функция ProtocolCloseCallComplete . В противном случае NDIS вызывает функцию ProtocolClCloseCallComplete клиента по завершении этой операции.

Комментарии

Клиенты обычно вызывают NdisClCloseCall в любом из следующих случаев:

  • Чтобы закрыть установленный вызов, независимо от того, был ли вызов инициирован клиентом с помощью NdisClMakeCall или был предложен удаленным узлом и принят клиентом Функция ProtocolClIncomingCall .
  • Из Функция ProtocolClIncomingCloseCall для отключения установленного вызова.

    Это происходит, когда удаленная сторона закрывает входящий вызов, инициированный удаленной стороной и принятый клиентом. Для исходящих вызовов, инициированных клиентом, это происходит, когда удаленная сторона закрывает подключение "точка — точка" на удаленном узле или когда последняя оставшаяся сторона в многоточечной виртуальной сети закрывает вызов на удаленном узле.

  • Из Функция ProtocolClMakeCallComplete для удаления инициированной клиентом попытки выполнить исходящий вызов.

    Это происходит, если диспетчер вызовов изменил параметры вызова, заданные клиентом, переданные в NdisClMakeCall , и клиент считает эти изменения неприемлемыми.

  • Из функции ProtocolClIncomingQoSChange для отключения установленного вызова.

    Это происходит, если изменение качества обслуживания, предложенное другой стороной в VC, является неприемлемым для клиента.

  • Из Функция ProtocolClModifyCallQoSComplete для удаления установленного вызова.

    Это происходит, если предлагаемое клиентом изменение качества обслуживания в VC не принимается, а измененный CM QoS, возвращенный в ProtocolClModifyCallQoSComplete , является неприемлемым для клиента.

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

Вызов клиента к NdisClCloseCall приводит к тому, что NDIS помечает NdisVcHandle как закрывающийся и вызывает функцию ProtocolCmCloseCall cm.

Чтобы разорвать установленный вызов в созданном клиентом многоточечный VC, клиент должен вызвать NdisClDropParty один или несколько раз, чтобы освободить все стороны, кроме последней стороны в VC, прежде чем вызывать NdisClCloseCall. Диспетчер вызовов завершит запрос клиента на закрытие многоточечных вызовов, если у данного проверяемого удостоверения по-прежнему есть несколько подключенных сторон. NdisPartyHandle, переданный в NdisClCloseCall, может быть любым допустимым дескриптором, полученным клиентом из предыдущих вызовов NdisClAddParty или NdisClMakeCall с заданным NdisVcHandle .

По мере того как удаленные стороны инициированного клиентом многоточечных вызовов запрашивают закрытие своих подключений, NDIS вызывает функцию ProtocolClDropParty клиента, если в созданном клиентом многоточечный VC существует несколько незаработанных сторон. Когда последняя оставшаяся удаленная сторона закрывает подключение, NDIS вызывает клиентВместо этого функция ProtocolClIncomingCloseCall. Следовательно, функция ProtocolClIncomingCloseCall любого клиента, который настраивает многоточечные подключения, должна определить последнюю оставшуюся сторону на своих многоточечных виртуальных машинах и передать соответствующий NdisPartyHandleв NdisClCloseCall.

После того как клиент выпускает NdisPartyHandle с NdisCloseCall, он может освободить (или повторно инициализировать для повторного использования) ресурсы для каждого государства, которое он поддерживал. Однако клиент не может освободить или повторно использовать свои ресурсы для каждого виртуального экземпляра аналогичным образом после завершения операции, инициированной с помощью NdisClCloseCall , так как NdisVcHandle, который не может быть повторно использован для выполнения другого вызова, так как он помечен как закрывающий, по-прежнему действителен до тех пор, пока не будет уничтожен VC. Либо клиент должен вызвать NdisCoDeleteVc , если он создал VC для исходящего вызова, прежде чем он освобождает или повторно инициализирует свои ресурсы для каждого VC, либо клиент должен отложить выпуск или повторной инициализации этих ресурсов до вызова функции ProtocolCoDeleteVc .

Требования

Требование Значение
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. раздел NdisCloseCall (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. раздел NdisCloseCall (NDIS 5.1)) в Windows XP.
Целевая платформа Персональный компьютер
Верхняя часть ndis.h (включая Ndis.h)
Библиотека Ndis.lib
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI Irql_Protocol_Driver_Function(ndis)

См. также раздел

NdisClDropParty

NdisClMakeCall

NdisClModifyCallQoS

NdisCoDeleteVc

NdisCoSendNetBufferLists

ProtocolCloseCallComplete

ProtocolClIncomingCallQoSChange

ProtocolClIncomingCloseCall

ProtocolClIncomingDropParty

ProtocolClMakeCallComplete

ProtocolClModifyCallQoSComplete

ProtocolCmCloseCall

ProtocolCoSendNetBufferListsComplete