NdisClCloseCall 函数 (ndis.h)

NdisClCloseCall 请求删除对指定 VC 的调用。

语法

NDIS_STATUS NdisClCloseCall(
  [in]           NDIS_HANDLE NdisVcHandle,
  [in, optional] NDIS_HANDLE NdisPartyHandle,
  [in, optional] PVOID       Buffer,
  [in]           UINT        Size
);

参数

[in] NdisVcHandle

正在关闭或断开连接的调用的 VC 的句柄。 此句柄由 NDIS 在最初使用 NdisCoCreateVc 创建时由 NDIS 提供,无论是由准备发出传出呼叫的客户端还是由准备将传入呼叫调度到客户端的呼叫管理器提供。

[in, optional] NdisPartyHandle

多点 VC 或 NULL 上要删除的最后一方句柄。 如果这是多点 VC,则客户端从对 NdisClMakeCallNdisClAddParty 的先前调用中获取了此句柄。

[in, optional] Buffer

指向调用方分配的缓冲区的指针,该缓冲区包含关闭连接时要传输到远程节点上的参与方的任何数据。 根据基础介质,此指针可以为 NULL

[in] Size

指定 Buffer 处的大小(以字节为单位),如果 Buffer 为 NULL,则

返回值

NdisClCloseCall 返回除 NDIS_STATUS_PENDING 以外的任何内容时,客户端应对其进行内部调用 ProtocolClCloseCallComplete 函数。 否则,完成此操作时,NDIS 会调用客户端的 ProtocolClCloseCallComplete 函数。

注解

客户端通常在以下任一情况下调用 NdisClCloseCall

  • 若要关闭已建立的呼叫,该调用是由客户端使用 NdisClMakeCall 发起的,还是由远程对等方提供并由客户端接受的 ProtocolClIncomingCall 函数。
  • ProtocolClIncomingCloseCall 函数,用于删除已建立的调用。

    当远程方关闭远程方最初发起且客户端接受的传入呼叫时,将发生这种情况。 对于客户端发起的传出调用,当远程方关闭远程节点上的点到点连接时,或者当多点 VC 上的最后一个剩余方关闭远程节点上的调用时,将发生这种情况。

  • ProtocolClMakeCallComplete 函数,用于删除客户端发起的发出传出调用的尝试。

    如果调用管理器修改了传递给 NdisClMakeCall 的客户端指定的调用参数,并且客户端发现这些修改不可接受,则会发生此情况。

  • ProtocolClIncomingQoSChange 函数删除已建立的调用。

    如果另一方在 VC 上提出的 QoS 更改对客户端而言不可接受,则会发生此情况。

  • ProtocolClModifyCallQoSComplete 函数,用于删除已建立的调用。

    如果不接受客户端在 VC 上提出的 QoS 更改,并且客户端无法接受返回到 ProtocolClModifyCallQoSComplete 的 CM 修改的 QoS,则会出现这种情况。

在调用 NdisClCloseCall 之前,协议必须确保其所有未完成的发送数据包都已返回到其 ProtocolCoSendNetBufferListsComplete 函数。 (通过 NdisCoSendNetBufferLists 发送的 数据包始终异步返回到 ProtocolCoSendNetBufferListsComplete.) 调用 NdisClCloseCall 后,协议不得调用 NdisCoSendNetBufferLists 以在 NdisClCloseCall 引用的 VC 上发送数据包。

客户端对 NdisClCloseCall 的调用会导致 NDIS 将 NdisVcHandle 标记为关闭,并调用 CM 的 ProtocolCmCloseCall 函数。

若要在客户端创建的多点 VC 上断开已建立的调用,客户端必须在调用 NdisClCloseCall 之前一次或多次调用 NdisClDropParty,以释放 VC 上除最后一方之外的所有方。 如果给定的 VC 仍连接了多个参与方,则调用管理器将使任何客户端关闭多点调用的请求失败。 传递给 NdisClCloseCallNdisPartyHandle 可以是客户端从其前面调用 NdisClAddPartyNdisClMakeCall 时使用给定的 NdisVcHandle 获取的任何有效句柄。

当客户端发起的多点调用请求关闭其连接的远程方时,只要客户端创建的多点 VC 上存在多个未完成的一方,NDIS 就会调用该客户端的 ProtocolClDropParty 函数。 当最后一个剩余的远程方关闭其连接时,NDIS 会调用客户端的 相反,ProtocolClIncomingCloseCall 函数。 因此,任何设置多点连接的客户端的 ProtocolClIncomingCloseCall 函数都必须标识其多点 VC 上最后一个剩余的一方,并将相应的 NdisPartyHandle 传递给 NdisClClCloseCall

客户端使用 NdisClCloseCall 发布 NdisPartyHandle 后,可以释放 (或重新初始化,以便) 其维护的每方状态的资源重复使用。 但是,在完成使用 NdisClCloseCall 启动的操作后,客户端无法以类似的方式释放或重用其每个 VC 资源,因为 NdisVcHandle 在 VC 被销毁之前仍然有效,因为该 NdisVcHandle 由于被标记为正在关闭,因此无法重复使用它进行另一次调用。 如果客户端在释放或重新初始化其每 VC 资源之前为传出调用创建了 VC,则必须调用 NdisCoDeleteVc ,或者客户端必须延迟这些资源的发布或重新初始化,直到调用其 ProtocolCoDeleteVc 函数。

要求

要求
最低受支持的客户端 支持 NDIS 6.0 和 NDIS 5.1 驱动程序 (请参阅 Windows Vista 中的 NdisClCloseCall (NDIS 5.1) ) 。 支持 NDIS 5.1 驱动程序 (请参阅 Windows XP 中的 NdisClCloseCall (NDIS 5.1) ) 。
目标平台 桌面
标头 ndis.h (包括 Ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_Protocol_Driver_Function (ndis)

另请参阅

NdisClDropParty

NdisClMakeCall

NdisClModifyCallQoS

NdisCoDeleteVc

NdisCoSendNetBufferLists

ProtocolClCloseCallComplete

ProtocolClIncomingCallQoSChange

ProtocolClIncomingCloseCall

ProtocolClIncomingDropParty

ProtocolClMakeCallComplete

ProtocolClModifyCallQoSComplete

ProtocolCmCloseCall

ProtocolCoSendNetBufferListsComplete