функция обратного вызова PROTOCOL_CL_MAKE_CALL_COMPLETE (ndis.h)

Функция ProtocolClMakeCallComplete используется клиентами NDIS, ориентированными на подключение, которые выполняют исходящие вызовы. Такие клиенты должны иметь функции ProtocolClMakeCallComplete для выполнения асинхронных операций, которые они инициируют с помощью NdisClMakeCall. В противном случае зарегистрированная функция ProtocolClMakeCallComplete драйвера протокола может просто возвращать управление.

Примечание Необходимо объявить функцию с помощью типа PROTOCOL_CL_MAKE_CALL_COMPLETE . Дополнительные сведения см. в следующем разделе "Примеры".
 

Синтаксис

PROTOCOL_CL_MAKE_CALL_COMPLETE ProtocolClMakeCallComplete;

void ProtocolClMakeCallComplete(
  [in]           NDIS_STATUS Status,
  [in]           NDIS_HANDLE ProtocolVcContext,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in]           PCO_CALL_PARAMETERS CallParameters
)
{...}

Параметры

[in] Status

Указывает окончательное состояние исходного вызова клиента к NdisClMakeCall, которое может быть одним из следующих вариантов:

NDIS_STATUS_SUCCESS

Попытка клиента настроить выполненное виртуальное подключение. Следовательно, клиент может продолжить передачу в активном VC с помощью NdisVcHandle , возвращенного NdisCoCreateVc, который клиент сохранил в своей области контекста для каждого VC в ProtocolVcContext .

NDIS_STATUS_RESOURCES

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

NDIS_STATUS_XXX

Диспетчер вызовов или базовый драйвер мини-порта не удалось установить активное подключение, и NDIS распространила это состояние сбоя, определяемого драйвером, клиенту.

[in] ProtocolVcContext

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

[in, optional] NdisPartyHandle

Если состояние NDIS_STATUS_SUCCESS и клиент создал многоточечный VC путем передачи явного дескриптора ProtocolPartyContextв NdisClMakeCall, это допустимый объект NdisPartyHandle . В противном случае этот параметр имеет значение NULL.

ProtocolClMakeCallComplete должен сохранять любые допустимые входные данные NdisPartyHandle, как правило, в области контекста клиента для каждой стороны. Клиент должен использовать этот дескриптор, если (или когда) выполняет последующий вызов NdisClDropParty или NdisCloseCall , ссылающийся на эту сторону.

[in] CallParameters

Указатель на буферизованное CO_CALL_PARAMETERS структуру. Клиент выделил этот буфер и инициализировал эту структуру с данными, определяемых клиентом, перед передачей этого указателя на NdisClMakeCall. При обработке запроса клиента диспетчер вызовов может изменить эти данные, чтобы отразить результаты согласования с сетью или с сигнальным одноранговым узлом.

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

None

Remarks

Вызов ProtocolClMakeCallComplete указывает, что диспетчер вызовов завершил обработку запроса клиента, чтобы установить виртуальное соединение с NdisClMakeCall.

Если попытка клиента установить исходящий вызов завершается неудачно (входное состояние — это что-либо, кроме NDIS_STATUS_SUCCESS), protocolClMakeCallComplete должен сделать следующее:

  • Отпустите или подготовьтесь к повторному использованию области ProtocolPartyContext , если таковые есть, и буфера в CallParameters , выделенном клиентом.
  • Разорвать созданный клиентом VC с помощью вызова NdisCoDeleteVc и выпуска или подготовки к повторному использованию выделенной клиентом области ProtocolVcContext .
В противном случае ProtocolClMakeCallComplete должен выполнить следующие действия:
  1. Проверьте элемент flags структуры в CallParameters , чтобы узнать, задано ли CALL_PARAMETERS_CHANGED, что указывает, что диспетчер вызовов изменил параметры вызова, предоставленные клиентом.
  2. Если да, проверьте данные в CallParameters , чтобы определить, допустимы ли они для этого подключения.

    Например, клиент может сохранить параметры буферизованного вызова для активного VC, сохранить NdisPartyHandle , если это мультиpoint VC, и, как правило, сделать клиент готовым к последующим передачам и другим операциям в активном VC, если он находит заданные параметры вызова удовлетворительно.

  3. В противном случае протокол сигнализации определяет, может ли клиент попытаться пересмотреть допустимые параметры вызова с помощью диспетчера вызовов.

    Например, определенный диспетчер вызовов может позволить своим клиентам вызывать NdisClModifyCallQoS один или несколько раз в этих обстоятельствах.

  4. Если параметры вызова, измененные CM, неприемлемы, а дальнейшее повторное согласование невозможно, ProtocolClMakeCallComplete должен отменить вызов с помощью NdisCloseCall.

    В этом случае ProtocolClMakeCallCompleteне должен пытаться освободить ресурсы, выделенные клиентом, при возвращении из NdisCloseCall , но может просто вернуть управление. Вместо этого клиент должен освободить выделенные ресурсы (или подготовить их для повторного использования) в функции ProtocolCloseCallComplete .

Примеры

Чтобы определить функцию ProtocolClMakeCallComplete , необходимо сначала указать объявление функции, определяющее тип определяемой функции. Windows предоставляет набор типов функций для драйверов. Объявление функции с помощью типов функций помогает анализу кода для драйверов, средства проверки статических драйверов (SDV) и других средств проверки найти ошибки, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить функцию ProtocolClMakeCallComplete с именем MyClMakeCallComplete, используйте тип PROTOCOL_CL_MAKE_CALL_COMPLETE , как показано в этом примере кода:

PROTOCOL_CL_MAKE_CALL_COMPLETE MyClMakeCallComplete;

Затем реализуйте функцию следующим образом:

_Use_decl_annotations_
VOID
 MyClMakeCallComplete(
    NDIS_STATUS  Status,
    NDIS_HANDLE  ProtocolVcContext,
    NDIS_HANDLE  NdisPartyHandle,
    PCO_CALL_PARAMETERS  CallParameters
    )
  {...}

Тип функции PROTOCOL_CL_MAKE_CALL_COMPLETE определен в файле заголовка Ndis.h. Чтобы точнее определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции заметку Use_decl_annotations . Заметка Use_decl_annotations гарантирует, что используются заметки, применяемые к типу функции PROTOCOL_CL_MAKE_CALL_COMPLETE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе "Объявление функций с помощью типов ролей функций для драйверов NDIS".

Сведения о Use_decl_annotations см. в разделе "Поведение функции аннотирования".

Требования

   
Минимальная версия клиента Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. протокол ProtocolClMakeCallComplete (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. протокол ProtocolClMakeCallComplete (NDIS 5.1)) в Windows XP.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL <= DISPATCH_LEVEL

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

CO_CALL_PARAMETERS

NdisCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmMakeCallComplete

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList

NdisMCmMakeCallComplete

ProtocolCloseCallComplete

ProtocolCmMakeCall