呼叫

下图显示了客户端通过呼叫管理器发出传出呼叫。

显示客户端通过呼叫管理器进行传出呼叫的关系图。

下图显示了客户端通过 MCM 驱动程序发出传出调用。

描述客户端使用 MCM 驱动程序进行传出调用的示意图。

在发出传出调用之前,面向连接的客户端必须:

  • 初始化 CO_CALL_PARAMETERS 类型的结构中的调用参数。 调用管理器或 MCM 驱动程序通常使用客户端指定的调用参数来设置调用并派生供微型端口驱动程序使用的媒体参数。

  • 使用 NdisCoCreateVc 启动 VC 的创建

成功返回 NdisCoCreateVc 后,客户端会调用 NdisClMakeCall 来启动调用 (查看本节中的两个) 图。

在调用 NdisClMakeCall 时,客户端将指针传递给之前初始化的 CO_CALL_PARAMETERS 结构。 客户端还会传递 NdisCoCreateVc) 返回的 NdisVcHandle (,该 NdisCoCreateVc) 标识客户端将传输 (的 VC,并可能接收调用的) 数据。 如果客户端进行多点调用 (对多个远程方) 的调用,则客户端还会传递 ProtocolPartyContext ,该元素指定客户端分配的常驻上下文区域的句柄,客户端将在其中维护多点 VC 上初始参与方的每方状态。

调用 NdisClMakeCall 会导致 NDIS 将此请求转发到调用管理器或 MCM 驱动程序的 ProtocolCmMakeCall 函数,客户端与之共享给定 的 NdisVcHandleProtocolCmMakeCall 必须验证客户端设置的输入调用参数。

ProtocolCmMakeCall 通信 () 与网络控制设备交换信号消息以建立连接。 呼叫管理器调用 NdisCoSendNetBufferLists 来启动此类交换 (请参阅 从 CoNDIS 驱动程序) 发送NET_BUFFER结构 。 MCM 驱动程序从不调用 NdisCoSendNetBufferLists。 相反,它直接通过网络传输数据。

调用管理器或 MCM 驱动程序可以在与相关网络组件协商时修改客户端提供的调用参数,并且可以返回不同于客户端最初提供给 NdisClMakeCall 的流量参数 (请参阅 传入请求以) 更改调用参数

传递给 ProtocolCmMakeCall的显式 NdisPartyHandle 指示客户端创建的 VC 将用于多点调用。 调用管理器或 MCM 驱动程序必须分配和初始化维护每方状态信息和控制多点调用所需的任何必要资源。

在呼叫管理器按照其媒体要求与其网络硬件进行所有必要的通信后,它必须调用 NdisCmActivateVc 来启动 VC 的激活 ,该 VC 将在其中发送并接收呼叫数据。 MCM 驱动程序必须调用 NdisMCmActivateVc

当基础微型端口驱动程序准备好在 VC (即,在) 激活 VC 后,调用管理器调用 NdisCmMakeCallComplete,MCM 驱动程序调用 NdisMCmMakeCallComplete。 此时,调用管理器或 MCM 驱动程序应已与网络协商以建立 VC 的调用参数,并且基础微型端口驱动程序应已完成 VC 的激活。

在对 Ndis (M) CmMakeCallComplete 的调用中,调用管理器或 MCM 驱动程序将 VC 的调用参数作为指向 CO_CALL_PARAMETERS 类型的结构的指针传递。 如果调用管理器修改了最初由客户端指定的调用参数,则它可以通过在 CO_CALL_PARAMETERS 结构中设置 CALL_PARAMETERS_CHANGED 标志来通知客户端。

调用 Ndis (M) CmMakeCallComplete 会导致 NDIS 调用发起传出调用的客户端的 ProtocolClMakeCallComplete 函数。 调用 ProtocolClMakeCallComplete 表示调用管理器已完成处理客户端与 NdisClMakeCall 建立虚拟连接的请求。

如果客户端建立传出调用的尝试成功,则 ProtocolClMakeCallComplete 应检查CALL_PARAMETERS_CHANGED标志,以确定客户端最初指定的调用参数是否已修改。 如果设置了指示已更改调用参数的标志, 则 ProtocolClMakeCallComplete 应检查返回的调用参数,以确定此连接是否可以接受这些参数。

如果调用参数是可接受的, 则 ProtocolClMakeCallComplete 仅返回控制权。 如果调用参数不可接受,并且信号协议允许此时重新协商,则客户端可以调用 NdisClModifyCallQoS 来请求更改调用参数 (请参阅 客户端发起的关闭呼叫) 的请求 。 如果信号协议不允许重新协商不可接受的调用参数, 则 ProtocolClMakeCallComplete 必须使用 NdisClcloseCall 取消调用, (请参阅 Client-Initiated 请求关闭呼叫) 。