PROTOCOL_CM_CLOSE_CALL回调函数 (ndis.h)

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

Note 必须使用 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处缓冲区的长度(以字节为单位)。如果 CloseDataNULL,则为零。

返回值

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,并且呼叫管理器必须根据其媒体类型执行任何必要的网络通信,以作为多点调用终止呼叫。 调用管理器还必须释放之前为其分配的内存,ProtocolCmMakeCall中为其 CallMgrPartyContext 指向的按方状态。 未能正确释放、解除分配或停用这些资源会导致内存泄漏。

通过网络终止呼叫后,已发送任何关闭数据,并且已释放 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的信息,请参阅 批注函数行为

要求

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

另请参阅

NdisClMakeCall

NdisCmDeactivateVc

NdisCoSendNetBufferLists

ProtocolCmMakeCall