PROTOCOL_CM_REG_SAP回调函数 (ndis.h)
ProtocolCmRegisterSap 函数是 NDIS 调用的必需函数,用于请求调用管理器代表面向连接的客户端注册 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 将 () 的操作状态返回为下列值之一:
返回代码 | 说明 |
---|---|
|
指示调用管理器已成功分配和/或初始化任何必要的资源来注册和维护 SAP。 此外,它还指示 SAP 已根据呼叫管理器支持的网络媒体的要求成功注册。 |
|
指示调用管理器将以异步方式完成此请求的处理。 呼叫经理必须调用完成所有处理后,NdisCmRegisterSapComplete 向 NDIS 发出注册已完成的信号。 |
|
指示调用管理器无法分配和/或初始化代表面向连接的客户端注册 SAP 所需的资源。 |
|
指示 在 Sap 中提供的规范无效或不受支持。 |
|
指示调用管理器在尝试为面向连接的客户端注册 SAP 时遇到错误。 返回代码适用于错误,可能是从另一个 NDIS 库函数传播的返回代码。 |
注解
ProtocolCmMakeCall 在必要时与网络控制设备或其他特定于媒体的代理进行通信,以便在面向连接的客户端的网络上注册 SAP(在 Sap 中指定的 SAP)。 此类操作包括但不限于与交换硬件通信、与网络控制站通信或适合网络媒体的其他操作。
如果需要呼叫管理器与 (的网络控制代理进行通信,则网络交换机) 它应使用与其 在其 ProtocolBindAdapterEx 函数中建立的网络控制代理的虚拟连接。 独立调用管理器通过调用 NdisCoSendNetBufferLists 通过基础微型端口驱动程序进行通信。 具有集成呼叫管理支持的微型端口驱动程序永远不会调用 NdisCoSendNetBufferLists。 相反,它们直接通过网络传输数据。
此外, ProtocolCmRegisterSap 应执行调用管理器代表面向连接的客户端维护 SAP 状态信息所需的动态资源和结构的任何必要分配。 此类资源包括但不限于内存缓冲区、数据结构、事件和其他类似资源。 调用管理器还必须初始化它分配的任何资源,然后才能将控制权返回到 NDIS。 呼叫经理必须将 NDIS 提供的标识 SAP 的句柄存储在其上下文区域中,以便将来使用。
如果 ProtocolCmRegisterSap 将返回NDIS_STATUS_SUCCESS,则应在分配每个 SAP 状态区域后,在将控制权返回到 NDIS 之前,在 CallMgrSapContext 中设置此状态区域的地址。 为此,请取消引用 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的信息,请参阅 批注函数行为。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | NDIS 6.0 和 NDIS 5.1 驱动程序支持 (请参阅 Windows Vista 中的 ProtocolCmRegisterSap (NDIS 5.1) ) 。 NDIS 5.1 驱动程序支持 (请参阅 Windows XP 中的 ProtocolCmRegisterSap (NDIS 5.1) ) 。 |
目标平台 | Windows |
标头 | ndis.h (包括 Ndis.h) |
IRQL | <= DISPATCH_LEVEL |