Функция NdisClRegisterSap (ndis.h)
NdisClRegisterSap регистрирует SAP, в которой клиент может получать входящие вызовы с удаленного узла.
Синтаксис
NDIS_STATUS NdisClRegisterSap(
[in] NDIS_HANDLE NdisAfHandle,
[in] NDIS_HANDLE ProtocolSapContext,
[in] PCO_SAP Sap,
[out] PNDIS_HANDLE NdisSapHandle
);
Параметры
[in] NdisAfHandle
Указывает дескриптор, возвращаемый NdisClOpenAddressFamilyEx, который неявно идентифицирует диспетчер вызовов, с помощью которого необходимо зарегистрировать SAP.
[in] ProtocolSapContext
Указывает дескриптор предоставляемой вызывающим абонентом области контекста, в которой клиент сохраняет состояние для этого SAP после его открытия. NDIS передает этот дескриптор клиенту во всех последующих вызовах sap, если вызов NdisClRegisterSap будет успешным.
[in] Sap
Указатель на предоставленную клиентом спецификацию для открытия SAP, отформатированную как структуру типа CO_SAP.
[out] NdisSapHandle
Указатель на переменную, в которой возвращается дескриптор недавно зарегистрированного SAP, если этот вызов выполнен успешно.
Возвращаемое значение
Когда NdisClRegisterSap возвращает что-либо, отличное от NDIS_STATUS_PENDING, клиент должен выполнить внутренний вызов к егоФункция ProtocolClRegisterSapComplete. В противном случае NDIS вызывает функцию ProtocolClRegisterSapComplete клиента после завершения этой операции.
Примечания
При вызове NdisClRegisterSap клиент запрашивает уведомления о входящих вызовах в определенном SAP. NDIS перенаправит указанную информацию SAP в функцию ProtocolCmRegisterSap диспетчера вызовов для проверки. Если указанный SAP уже используется или если диспетчер вызовов не распознает указанную клиентом спецификацию в Sap, диспетчер вызовов завершается сбоем этого запроса.
Формат SAP зависит от среды и зависит от семейства адресов, поддерживаемого диспетчером вызовов, который впоследствии использует зарегистрированные SAP для маршрутизации входящих вызовов соответствующему клиенту. Диспетчер вызовов может регистрировать SAP для установленных PVCS, не связываясь с другими сетевыми компонентами в зависимости от базового носителя.
Если вызов NdisClRegisterSap выполнен успешно, клиент должен сохранить дескриптор, возвращенный в NdisSapHandle , так как это обязательный параметр для NdisClDeregisterSap. Вызывающие объект NdisClRegisterSap обычно передают указатель на переменную в области состояния, выделенной клиентом, в ProtocolSapContext, чтобы NDIS может задать для него значение NdisSapHandle , если этот вызов выполнен успешно. NDIS передает заданный ProtocolSapContext в зарегистрированные функции ProtocolCl/CoXxx клиента во всех последующих вызовах sap, пока клиент не вызовет NdisClDeregisterSap.
Обычно клиент вызывает NdisClRegisterSap из функции ProtocolAfRegisterNotify после успешного вызова NdisClOpenAddressFamilyEx. Регистрация одного или нескольких SAP позволяет клиенту получать входящие вызовы, как только диспетчер вызовов получает их по сети.
В отличие от исходящих вызовов, инициированных клиентом, клиент не вызывает NdisCoCreateVc перед вызовом NdisClRegisterSap. Для входящих вызовов диспетчер вызовов инициирует создание VC следующим образом:
- При получении входящего вызова в зарегистрированной SAP диспетчер вызовов сначала вызывает NdisCoCreateVc, что приводит к вызову функции ProtocolCoCreateVc клиента NDIS.
- Когда VC настроен и активирован, диспетчер вызовов вызывает NdisCmDispatchIncomingCall, что приводит к вызову клиента NDIS.Функция ProtocolClIncomingCall.
Требования
Минимальная версия клиента | Поддерживается для драйверов NDIS 6.0 и NDIS 5.1 (см. NdisClRegisterSap (NDIS 5.1)) в Windows Vista. Поддерживается для драйверов NDIS 5.1 (см. NdisClRegisterSap (NDIS 5.1)) в Windows XP. |
Целевая платформа | Рабочий стол |
Заголовок | ndis.h (включая Ndis.h) |
Библиотека | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | Irql_Protocol_Driver_Function(ndis) |