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

Функция ProtocolClOpenAfCompleteEx завершает открытие семейства адресов (AF), которое было запущено, когда клиент CoNDIS вызывал функцию NdisClOpenAddressFamilyEx .

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

Синтаксис

PROTOCOL_CL_OPEN_AF_COMPLETE_EX ProtocolClOpenAfCompleteEx;

void ProtocolClOpenAfCompleteEx(
  [in] NDIS_HANDLE ProtocolAfContext,
  [in] NDIS_HANDLE NdisAfHandle,
  [in] NDIS_STATUS Status
)
{...}

Параметры

[in] ProtocolAfContext

Предоставленный клиентом дескриптор контекстной области для автоФО адреса. Клиент выделил эту область контекста и передал этот дескриптор в NDIS в вызовеФункция NdisClOpenAddressFamilyEx.

[in] NdisAfHandle

Предоставленный NDIS дескриптор af, если состояние NDIS_STATUS_SUCCESS. В противном случае этот параметр имеет значение NULL. Этот дескриптор представляет связь, установленную NDIS между клиентом и диспетчером вызовов, привязанным к адаптеру мини-порта CoNDIS. Если дескриптор не равен NULL, клиент должен сохранить дескриптор для использования в последующих вызовах функций NdisClXxx и NdisCoXxx .

[in] Status

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

NDIS_STATUS_SUCCESS

Af был открыт, поэтому клиент может инициализировать свое состояние в ProtocolAfContext и использовать возвращенный дескриптор из NdisAfHandle в последующих вызовах функций NdisClXxx и NdisCoXxx , таких как NdisCoOidRequest.

NDIS_STATUS_RESOURCES

Запрошенная операция завершилась сбоем, так как NDIS или диспетчеру вызовов не удалось выделить достаточно памяти или инициализировать состояние, которое один из них использует для отслеживания открытого клиентом af, указанного ProtocolAfContext .

NDIS_STATUS_FAILURE

NDIS не удалось выполнить вызов, возможно, по одной из следующих причин:

  • Данная af не соответствует ни одной af-функции, которая была зарегистрирована для базового драйвера мини-порта, к которому привязан вызывающий объект.
  • Привязка адаптера вызывающего абонента закрывается.
  • Диспетчер вызовов, который зарегистрировал указанную AF, закрывает привязку к базовому адаптеру мини-порта.

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

None

Remarks

Для клиентов CoNDIS требуется функция ProtocolClOpenAfCompleteEx . Клиенты CoNDIS должны предоставить ProtocolClOpenAfCompleteEx для выполнения асинхронных операций, инициируемых клиентами путем вызоваФункция NdisClOpenAddressFamilyEx.

NDIS вызывает ProtocolClOpenAfCompleteEx , чтобы указать, что произошли некоторые или все из следующих действий:

  • Если все параметры клиента Функция ProtocolCoAfRegisterNotify, переданная в функцию NdisClOpenAddressFamilyEx , была допустимой. NDIS вызвал функцию ProtocolCmOpenAf диспетчера вызовов, который только что зарегистрировал указанную af с помощью NDIS.
  • Диспетчер вызовов изучил спецификацию, которую функция ProtocolCoAfRegisterNotify клиента передала в NdisClOpenAddressFamilyEx по параметру AddressFamily , и вернул, была ли она допустимой для этого диспетчера вызовов в NDIS.
Если попытка клиента открыть af не удается, NDIS очищает сохраненное состояние перед вызовом ProtocolClOpenAfCompleteEx. В этом случае ProtocolClOpenAfCompleteEx может освободить ресурсы, выделенные клиентом для вызова NdisClOpenAddressFamilyEx , или подготовить их к повторному использованию.

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

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

NDIS вызывает ProtocolClOpenAfCompleteEx по адресу IRQL = PASSIVE_LEVEL.

Примеры

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

Например, чтобы определить функцию ProtocolClOpenAfCompleteEx с именем MyClOpenAfCompleteEx, используйте тип PROTOCOL_CL_OPEN_AF_COMPLETE_EX , как показано в следующем примере кода:

PROTOCOL_CL_OPEN_AF_COMPLETE_EX MyClOpenAfCompleteEx;

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

_Use_decl_annotations_
VOID
 MyClOpenAfCompleteEx(
    NDIS_HANDLE  ProtocolAfContext,
    NDIS_HANDLE  NdisAfHandle,
    NDIS_STATUS  Status
    )
  {...}

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

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

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Windows
Header ndis.h (включая Ndis.h)
IRQL PASSIVE_LEVEL

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

NdisClOpenAddressFamilyEx

NdisClRegisterSap

NdisCoCreateVc

NdisCoOidRequest

ProtocolCmOpenAf

ProtocolCoAfRegisterNotify