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

Функция ProtocolCmMakeCall — это обязательная функция, которая настраивает параметры мультимедиа для виртуального подключения (VC) и активирует виртуальное подключение.

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

Синтаксис

PROTOCOL_CM_MAKE_CALL ProtocolCmMakeCall;

NDIS_STATUS ProtocolCmMakeCall(
  [in]            NDIS_HANDLE CallMgrVcContext,
  [in, out]       PCO_CALL_PARAMETERS CallParameters,
  [in, optional]  NDIS_HANDLE NdisPartyHandle,
  [out, optional] PNDIS_HANDLE CallMgrPartyContext
)
{...}

Параметры

[in] CallMgrVcContext

Указывает дескриптор выделенной диспетчером вызовов области контекста, в которой диспетчеры вызовов сохраняют свое состояние для каждого VC. Диспетчер вызовов предоставил этот дескриптор NDIS из функции ProtocolCoCreateVc .

[in, out] CallParameters

Указатель на структуру CO_CALL_PARAMETERS , содержащую параметры, заданные клиентом, ориентированным на подключение, для этого исходящего вызова.

[in, optional] NdisPartyHandle

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

[out, optional] CallMgrPartyContext

При возврате задает дескриптор для области контекста, предоставленной диспетчером вызовов, в которой диспетчер вызовов сохраняет состояние о исходной стороне в многоточечный вызов. Если NdisPartyHandle имеет значение NULL, этот дескриптор должен иметь значение NULL.

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

ProtocolCmMakeCall возвращает состояние своих операций в качестве одного из следующих значений:

Код возврата Описание
NDIS_STATUS_SUCCESS
Указывает, что диспетчер вызовов успешно выделил необходимые ресурсы для выполнения вызова и смог активировать виртуальное подключение к драйверу мини-порта.
NDIS_STATUS_PENDING
Указывает, что диспетчер вызовов завершит запрос асинхронно. Когда диспетчер вызовов завершил все операции для выполнения вызова, он должен вызвать NdisCmMakeCallComplete , чтобы сообщить NDIS о завершении этого вызова.
NDIS_STATUS_RESOURCES
Указывает, что диспетчеру вызовов не удалось выделить и /или инициализировать свои ресурсы для активации виртуального подключения, как запрошено клиентом.
NDIS_STATUS_NOT_SUPPORTED
Указывает, что диспетчеру вызовов не удалось активировать виртуальное подключение, так как вызывающий объект запросил недопустимые или недоступные функции в параметрах вызова, указанных в CallParameters .

Комментарии

Если protocolCmMakeCall получает явный NdisPartyHandle, этот VC был создан клиентом для вызова с несколькими точками. Диспетчер вызовов должен выделить и инициализировать все необходимые ресурсы, необходимые для поддержания сведений о состоянии и управления многоточечным вызовом. К таким ресурсам относятся, но они не ограничиваются буферами памяти, структурами данных, событиями и другими аналогичными ресурсами. Если диспетчер вызовов не может выделить или инициализировать необходимые ресурсы для областей состояния, он должен вернуть управление в NDIS с помощью NDIS_STATUS_RESOURCES.

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

Если диспетчер вызовов необходим для связи с сетевым оборудованием (например, сетевым коммутатором), он должен использовать виртуальное подключение к устройству сетевого управления, которое оно установило в функции ProtocolBindAdapterEx . Диспетчеры вызовов взаимодействуют с сетевым оборудованием через мини-драйвер, вызывая NdisCoSendNetBufferLists. Драйверы минипорта с встроенной поддержкой управления звонками не будут вызывать NdisCoSendNetBufferLists, а передавать сами данные.

После того как диспетчер вызовов выполнил все необходимые коммуникации с сетевым оборудованием в соответствии с требованиями среды, диспетчеры вызовов должны вызвать NdisCmActivateVc.

Если этот вызов был многоточечным вызовом, после того как диспетчер вызовов обменивается данными с сетевым оборудованием, проверенными параметрами вызова и выделяет и инициализирует свои данные о состоянии на стороне, адрес своего блока состояния должен быть задан в дескрипторе CallMgrPartyContext перед возвратом элемента управления в NDIS. Дескриптор задается путем разыменовки дескриптора и сохранения указателя на блок состояния в качестве значения дескриптора. Например:

*CallMgrPartyContext = SomeBuffer ;

Если ProtocolCmMakeCall выполнил необходимые операции для своей сети, а VC успешно активирован через NdisCmActivateVc, ProtocolCmMakeCall должен как можно быстрее вернуть управление с состоянием STATUS_SUCCESS.

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

Примеры

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

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

PROTOCOL_CM_MAKE_CALL MyCmMakeCall;

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

_Use_decl_annotations_
NDIS_STATUS
 MyCmMakeCall(
    NDIS_HANDLE  CallMgrVcContext,
    PCO_CALL_PARAMETERS  CallParameters,
    NDIS_HANDLE  NdisPartyHandle,
    PNDIS_HANDLE  CallMgrPartyContext
    )
  {...}

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

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

Требования

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

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

NdisClMakeCall

NdisCmActivateVc

NdisCmMakeCallComplete

ProtocolCoCreateVc