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

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

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

Синтаксис

PROTOCOL_CL_REGISTER_SAP_COMPLETE ProtocolClRegisterSapComplete;

void ProtocolClRegisterSapComplete(
  [in] NDIS_STATUS Status,
  [in] NDIS_HANDLE ProtocolSapContext,
  [in] PCO_SAP Sap,
  [in] NDIS_HANDLE NdisSapHandle
)
{...}

Параметры

[in] Status

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

NDIS_STATUS_SUCCESS

SAP зарегистрирован как в NDIS, так и в диспетчере вызовов, который впоследствии будет вызываться NdisCmDispatchIncomingCall всякий раз, когда он получает входящее предложение вызова, направленное на данную SAP, тем самым вызывая NDIS для вызова клиентаФункция ProtocolClIncomingCall.

NDIS_STATUS_RESOURCES

NDIS или диспетчер вызовов не удалось выделить и /или инициализировать необходимые ресурсы для регистрации и обслуживания SAP.

NDIS_STATUS_INVALID_DATA

Клиент предоставил недопустимую спецификацию sap в NDIS, которую он перенаправил в функцию ProtocolCmRegisterSap диспетчера вызовов для проверки.

NDIS_STATUS_XXX

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

[in] ProtocolSapContext

Указывает дескриптор области контекста клиента для sap, которая изначально была передана клиенту в NDIS при вызове NdisClRegisterSap. Если регистрация выполнена успешно, NDIS сохраняет этот дескриптор контекста и затем использует его в вызовах функции ProtocolClIncomingCall клиента, относящейся к этой SAP.

[in] Sap

Указатель на буфер, выделенный клиентом, содержащий спецификацию для открытия SAP. Изначально клиент передал этот указатель на NdisClRegisterSap.

[in] NdisSapHandle

Если состояние NDIS_STATUS_SUCCESS, указывает действительный дескриптор NDIS для этого зарегистрированного SAP, фактически устанавливается связь с NDIS между клиентом и определенным диспетчером вызовов для указанной клиентом SAP. В противном случае этот параметр имеет значение NULL. Клиент должен сохранить допустимый дескриптор( предпочтительно в области ProtocolSapContext ) для последующего вызова NdisClDeregisterSap.

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

None

Remarks

NDIS вызывает ProtocolClRegisterSapComplete , чтобы указать, что предыдущий вызов клиента к NdisClRegisterSap был обработан NDIS и, если NDIS не завершил вызов, диспетчер вызовов, с которым клиент разделяет NdisAfHandle , который он передал NdisClRegisterSap.

Для получения входящих вызовов через сетевой адаптер, ориентированный на подключение, клиент ProtocolCoAfRegisterNotify илиФункция ProtocolClOpenAfCompleteEx обычно регистрирует одну или несколько SAP в диспетчере вызовов.

Чтобы зарегистрировать каждый SAP, клиент вызывает NdisClRegisterSap, передав NdisAfHandle , который идентифицирует диспетчер вызовов, от которого клиент хочет получать уведомления о входящих вызовах, и NDIS возвращает клиенту NdisSapHandle зарегистрированной SAP, если вызов клиента к NdisClRegisterSap завершается успешно. ProtocolClRegisterSapComplete должен сохранять каждый допустимый объект NdisSapHandle, обычно в клиентской области ProtocolSapContext , чтобы он смог освободить SAP позже с помощью NdisClDeregisterSap.

Формат SAP зависит от диспетчера вызовов. Если диспетчер вызовов не распознает SAP, что клиент пытается зарегистрировать или если указанный SAP уже используется, диспетчер вызовов может завершиться ошибкой регистрации SAP. ProtocolClRegisterSapComplete должен проверить состояние ввода для NDIS_STATUS_SUCCESS перед дальнейшим выполнением. Если попытка зарегистрировать SAP завершилась ошибкой,
ProtocolClRegisterSapComplete может либо освободить область контекста SAP и буфер в Sap , выделенные клиентом, либо подготовить их к повторному использованию в другом вызове NdisClRegisterSap.

Клиент может получать входящие вызовы к SAP, даже если регистрация SAP все еще находится в состоянии ожидания, то есть до вызова функции ProtocolClRegisterSapComplete .

Примеры

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

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

PROTOCOL_CL_REGISTER_SAP_COMPLETE MyClRegisterSapComplete;

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

_Use_decl_annotations_
VOID
 MyClRegisterSapComplete(
    NDIS_STATUS  Status,
    NDIS_HANDLE  ProtocolSapContext,
    PCO_SAP  Sap,
    NDIS_HANDLE  NdisSapHandle
    )
  {...}

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

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

Требования

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

См. также

NdisClDeregisterSap

NdisClRegisterSap

NdisCmDispatchIncomingCall

NdisCmRegisterSapComplete

NdisFreeMemory

NdisFreeToNPagedLookasideList

NdisMCmDispatchIncomingCall

NdisMCmRegisterSapComplete

ProtocolClIncomingCall

ProtocolClOpenAfCompleteEx

ProtocolCmRegisterSap

ProtocolCoAfRegisterNotify