PROTOCOL_CM_REG_SAP回调函数 (ndis.h)

ProtocolCmRegisterSap 函数是 NDIS 调用的必需函数,用于请求调用管理器代表面向连接的客户端注册 SAP(服务接入点)。

注意 必须使用 PROTOCOL_CM_REG_SAP 类型声明函数。 有关详细信息,请参阅以下示例部分。
 

语法

PROTOCOL_CM_REG_SAP ProtocolCmRegSap;

NDIS_STATUS ProtocolCmRegSap(
  [in]  NDIS_HANDLE CallMgrAfContext,
  [in]  PCO_SAP Sap,
  [in]  NDIS_HANDLE NdisSapHandle,
  [out] PNDIS_HANDLE CallMgrSapContext
)
{...}

参数

[in] CallMgrAfContext

指定调用管理器分配的上下文区域的句柄,调用管理器在其中维护其按打开的 AF 状态。 调用管理器从其 ProtocolCmOpenAf 函数向 NDIS 提供此句柄。

[in] Sap

指向特定于媒体的CO_SAP结构的指针,该结构包含面向连接的客户端所注册的特定 SAP。

[in] NdisSapHandle

指定 NDIS 提供的唯一标识此 SAP 的句柄。 此句柄对调用管理器不透明,并保留供 NDIS 库使用。

[out] CallMgrSapContext

返回时,指定调用管理器提供的上下文区域的句柄,调用管理器在其中维护有关此 SAP 的状态。

返回值

ProtocolCmRegisterSap 返回其作的状态,如下所示之一:

返回代码 描述
NDIS_STATUS_SUCCESS
指示调用管理器已成功分配和/或初始化任何必要的资源来注册和维护 SAP。 此外,它还指示调用管理器支持的网络媒体需要成功注册 SAP。
NDIS_STATUS_PENDING
指示调用管理器将异步完成此请求的处理。 呼叫经理必须呼叫 NdisCmRegisterSapComplete 完成所有处理,以向 NDIS 发出注册完成的信号。
NDIS_STATUS_RESOURCES
指示调用管理器无法分配和/或初始化其代表面向连接的客户端注册 SAP 所需的资源。
NDIS_STATUS_INVALID_DATA
指示 Sap 提供的规范无效或不受支持。
NDIS_STATUS_XXX
指示调用管理器在尝试为面向连接的客户端注册 SAP 时遇到错误。 返回代码适用于错误,可能是从另一个 NDIS 库函数传播的返回代码。

言论

ProtocolCmMakeCall 根据需要与网络控制设备或其他特定于媒体的代理通信,以在面向连接的客户端的网络上 Sap指定注册 SAP。 此类作包括但不限于与切换硬件通信、与网络控制站通信或其他适用于网络媒体的作。

如果需要调用管理器与网络控制代理(换句话说,网络交换机)通信,则应使用 与它在 protocolBindAdapterEx 函数中建立的网络控制代理的虚拟连接。 独立呼叫管理器通过调用 NdisCoSendNetBufferLists来通过基础微型端口驱动程序进行通信。 具有集成呼叫管理支持的微型端口驱动程序从不调用 NdisCoSendNetBufferLists。 而是直接通过网络传输数据。

此外,ProtocolCmRegisterSap 应执行调用管理器代表面向连接的客户端维护 SAP 状态信息所需的动态资源和结构的任何必要分配。 此类资源包括但不限于内存缓冲区、数据结构、事件和其他类似的资源。 调用管理器还必须在将控制权返回到 NDIS 之前初始化它分配的任何资源。 调用管理器必须在其上下文区域中存储标识 SAP 的 NDIS 提供的句柄,该句柄在 NdisSapHandle中提供以供将来使用。

如果 ProtocolCmRegisterSap 将返回NDIS_STATUS_SUCCESS,则应在分配每个 SAP 状态区域后,在 CallMgrSapContext 中设置此状态区域的地址,然后再将控制权返回到 NDIS。 为此,请取消引用 CallMgrSapContext 并将指向数据区域的指针存储为句柄的值。 例如:

*CallMgrSapContext = SomeBuffer ;

如果已由另一个面向连接的客户端注册的给定 SAP,则调用管理器必须失败请求并返回NDIS_STATUS_INVALID_DATA。

调用管理器代表面向连接的客户端注册 SAP 后,它会通过调用通知传入呼叫套餐的客户端定向到该 SAP NdisCmDispatchIncomingCall

示例

若要定义 ProtocolCmRegisterSap 函数,必须先提供一个函数声明来标识要定义的函数的类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为“MyCmRegisterSap”的 protocolCmRegisterSap 函数,请使用 PROTOCOL_CM_REG_SAP 类型,如以下代码示例所示:

PROTOCOL_CM_REG_SAP MyCmRegisterSap;

然后,按如下所示实现函数:

_Use_decl_annotations_
NDIS_STATUS
 MyCmRegisterSap(
    NDIS_HANDLE  CallMgrAfContext,
    PCO_SAP  Sap,
    NDIS_HANDLE  NdisSapHandle,
    PNDIS_HANDLE  CallMgrSapContext
    )
  {...}

PROTOCOL_CM_REG_SAP 函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 注释添加到函数定义。 Use_decl_annotations 批注可确保使用应用于头文件中 PROTOCOL_CM_REG_SAP 函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数。

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

要求 价值
最低支持的客户端 Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 ProtocolCmRegisterSap (NDIS 5.1) 。 Windows XP 中支持 NDIS 5.1 驱动程序(请参阅 ProtocolCmRegisterSap (NDIS 5.1)。
目标平台 窗户
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

NdisCmDispatchIncomingCall

NdisCmRegisterSapComplete

NdisCoSendNetBufferLists

ProtocolCmDeregisterSap

ProtocolCmOpenAf