PROTOCOL_CL_INCOMING_CLOSE_CALL回调函数 (ndis.h)

所有面向连接的 NDIS 客户端都使用 ProtocolClIncomingCloseCall 函数。 所有这些客户端都必须具有完全正常运行 ProtocolClIncomingCloseCall 函数。

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

语法

PROTOCOL_CL_INCOMING_CLOSE_CALL ProtocolClIncomingCloseCall;

void ProtocolClIncomingCloseCall(
  [in] NDIS_STATUS CloseStatus,
  [in] NDIS_HANDLE ProtocolVcContext,
  [in] PVOID CloseData,
  [in] UINT Size
)
{...}

参数

[in] CloseStatus

指定指示连接拆解原因的状态,通常NDIS_STATUS_SUCCESS指示调用的远程方请求关闭连接。 任何其他值都表示网络上的问题导致调用管理器终止连接。

[in] ProtocolVcContext

指定关闭连接的 VC 的客户端每 VC 上下文区域的句柄。 无论 CloseStatus的值如何,客户端都不能发送或接收 NdisVcHandle 存储在此上下文区域中的 VC 上的数据。

[in] CloseData

指向包含特定于协议的关闭消息的缓冲区的指针,可能是由调用管理器通过网络接收的远程客户端提供的,也可以 NULL

CloseStatus NDIS_STATUS_SUCCESS时,如果基础网络介质不支持在关闭连接时传输数据,则此参数 NULL。 但是,任何特定的呼叫管理器都可能定义一个结构,以在网络上出现问题导致调用拆解时将其他诊断信息传递给其客户端。

[in] Size

指定缓冲区的大小(以字节为单位)CloseData,如果 CloseData为 NULL,则为零。

返回值

没有

言论

调用 ProtocolClIncomingCloseCall 表示发生了以下情况之一:

  • 调用管理器已通过网络收到关闭已建立连接的请求,该请求由 NdisVcHandle 标识, 客户端存储在其每个 VC 上下文区域中的 ProtocolVcContext
  • 呼叫管理器检测到网络问题将阻止在已建立的连接上进行进一步的数据传输。
在任一情况下,ProtocolClIncomingCloseCall 应执行任何协议确定的作,例如通知客户端自己的客户端(s)连接正在断开。 例如,如果要关闭的调用是由客户端创建的多点 VC,ProtocolClIncomingCloseCall 必须调用 NdisClDropParty 一次或多次,直到只有一方保留在其多点 VC 上。

无论给定的 VC 是单点连接还是多点连接,ProtocolClIncomingCloseCall 都必须调用 NdisCloseCall 来确认客户端不会尝试发送或期望接收此特定 VC 上的数据。 如果调用管理器创建了此 VC,ProtocolClIncomingCloseCall 应在调用 NdisCloseCall后返回控制权。 调用管理器负责销毁或重复使用它创建的任何 VC。

如果客户端最初为传出调用创建了此 VC,ProtocolClIncomingCloseCall 可以在调用 NdisClDropParty NdisClDropParty 多次(如果有)并 NdisCloseCall后执行以下作之一:

  • 如果 CloseStatus NDIS_STATUS_SUCCESS,请使用 NdisCoDeleteVc 拆解 VC,然后释放客户端的每个 VC 上下文区域,或者准备在后续调用 NdisCoCreateVc中重复使用。
  • 如果 CloseStatus NDIS_STATUS_SUCCESS,请保留客户端创建的 VC 并准备其每个 VC 上下文区域,以便在后续调用 NdisClMakeCall中重复使用。
  • 否则,使用 NdisCoDeleteVc 拆毁 VC,并在调用管理器指示网络变得无效时释放其每 VC 上下文区域。

示例

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

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

PROTOCOL_CL_INCOMING_CLOSE_CALL MyClIncomingCloseCall;

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

_Use_decl_annotations_
VOID
 MyClIncomingCloseCall(
    NDIS_STATUS  CloseStatus,
    NDIS_HANDLE  ProtocolVcContext,
    PVOID  CloseData,
    UINT  Size
    )
  {...}

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

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

要求

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

另请参阅

NdisCloseCall

NdisClDropParty

NdisClMakeCall

NdisCmDispatchIncomingCloseCall

NdisCoCreateVc

NdisCoDeleteVc

NdisFreeMemory

NdisFreeToNPagedLookasideList NdisMCmDispatchIncomingCloseCall

ProtocolClDropPartyComplete

ProtocolCoDeleteVc