PROTOCOL_CM_CLOSE_CALL回调函数 (ndis.h)

ProtocolCmCloseCall 函数是一个必需的函数,用于终止现有调用并释放调用管理器为调用分配的任何资源。

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

语法

PROTOCOL_CM_CLOSE_CALL ProtocolCmCloseCall;

NDIS_STATUS ProtocolCmCloseCall(
  [in]           NDIS_HANDLE CallMgrVcContext,
  [in, optional] NDIS_HANDLE CallMgrPartyContext,
  [in, optional] PVOID CloseData,
  [in, optional] UINT Size
)
{...}

参数

[in] CallMgrVcContext

指定调用管理器分配的上下文区域的句柄,调用管理器在其中维护其每 VC 状态。 此句柄是从调用管理器 ProtocolCmMakeCall 函数提供给 NDIS 的。

[in, optional] CallMgrPartyContext

指定呼叫管理器分配的上下文区域的句柄(如果有),其中调用管理器维护多点 VC 上的一方的相关信息。 如果关闭的调用不是多点调用,则此句柄为 NULL

[in, optional] CloseData

指向缓冲区的指针,该缓冲区包含面向连接的客户端指定数据,应在终止调用之前通过连接发送这些数据。 如果基础网络介质在关闭连接时不支持数据传输,则此参数为 NULL

[in, optional] Size

指定 CloseData 处缓冲区的长度(以字节为单位),如果 CloseData 为 NULL,则为

返回值

ProtocolCmCloseCall 将 () 的操作状态返回为下列值之一:

返回代码 说明
NDIS_STATUS_SUCCESS
指示呼叫管理器已成功终止呼叫。
NDIS_STATUS_PENDING
指示调用管理器将完成异步终止调用的请求。 当调用管理器已完成终止连接所需的所有操作后,它必须调用 NdisCmCloseCallComplete 以向 NDIS 发出信号,指示该调用已关闭。
NDIS_STATUS_INVALID_DATA
指示已指定 CloseData ,但基础网络介质不支持同时发送数据并终止调用。
NDIS_STATUS_XXX
指示呼叫管理器无法终止呼叫。 返回的实际错误可以是从另一个 NDIS 库例程传播的状态。

注解

ProtocolCmCloseCall 与网络控制设备或其他媒体特定的执行组件通信(根据其媒体的需要),以终止本地节点与远程节点之间的连接。 如果需要呼叫管理器与网络控制设备通信, (例如网络交换机) 它应使用与 在其 ProtocolBindAdapterEx 函数中建立的网络控制设备的虚拟连接。 独立呼叫管理器通过调用 NdisCoSendNetBufferLists 与此类网络设备通信。 具有集成呼叫管理支持的微型端口驱动程序永远不会调用 NdisCoSendNetBufferLists。 而是直接通过网络传输数据。

如果 CloseData 为非 NULL ,并且此调用管理器处理的媒体支持在连接终止时发送数据,则调用管理器应在完成呼叫终止之前将 CloseData 中指定的数据传输到远程节点。 如果不支持在连接终止的情况下并发发送数据,则调用管理器应返回NDIS_STATUS_INVALID_DATA。

如果 向 ProtocolCmCloseCall 传递了显式 CallMgrPartyContext,则终止的调用是多点 VC,并且呼叫管理器必须根据其媒体类型与其网络硬件执行任何必要的网络通信,以以多点调用的形式终止呼叫。 调用管理器还必须为 CallMgrPartyContext 指向的每方状态释放之前在 ProtocolCmMakeCall 中分配的内存。 未能正确释放、解除分配或以其他方式停用这些资源会导致内存泄漏。

在网络终止呼叫后,发送了任何关闭的数据,并释放了 CallMgrPartyContext 上的任何资源,呼叫管理器必须调用 NdisCmDeactivateVc。 这会通知 NDIS 和基础微型端口驱动程序(如果有)预计给定的 VC 不会进一步传输。

示例

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

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

PROTOCOL_CM_CLOSE_CALL MyCmCloseCall;

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

_Use_decl_annotations_
NDIS_STATUS
 MyCmCloseCall(
    NDIS_HANDLE  CallMgrVcContext,
    NDIS_HANDLE  CallMgrPartyContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

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

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

要求

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

另请参阅

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall