Client-Initiated 更改调用参数的请求

客户端请求使用 NdisClModifyCallQoS 在活动虚拟连接(VC)上更改服务质量(QoS)。

下图显示了通话管理器的客户端请求更改服务质量。

显示调用管理器客户端在活动 VC 上请求 QoS 更改的关系图。

下图显示了请求服务质量更改的 MCM 驱动程序的客户端。

描述 MCM 驱动程序客户端在活动 VC 上请求 QoS 更改的关系图。

在调用 NdisClModifyCallQoS 时,客户端提供:

  • 标识 VC 的 NdisVcHandle 参数。

  • 指向 CO_CALL_PARAMETERS 结构的指针,该结构包含客户端请求的调用参数。

客户端可以请求 QoS 更改的情况由信号协议确定。

调用 NdisClModifyCallQoS 会导致 NDIS 调用调用管理器或 MCM 驱动程序的 ProtocolCmModifyCallQoS 函数,该函数输入 NdisVcHandle 和缓冲CO_CALL_PARAMETERS结构,客户端传递给 NdisClModifyCallQoSProtocolCmModifyQoS 与网络控制设备或其他媒体特定的代理通信,这是其媒体所必需,以修改已建立的虚拟连接的特定于媒体的调用参数。

与网络通信并确定更改成功后,调用管理器必须调用 NdisCmActivateVc(MCM 驱动程序必须调用 NdisMCmActivateVc),才能使用新的调用参数激活指定的 VC。

如果网络不接受新的调用参数,或者基础微型端口驱动程序不能接受参数,则调用管理器或 MCM 驱动程序必须将 VC 还原到尝试任何修改之前存在的状态,并返回NDIS_STATUS_FAILURE。

若要指示客户端更改 QoS 请求的状态,调用管理器调用 NdisCmModifyCallQoSComplete,MCM 驱动程序调用 NdisMCmModifyCallQoSComplete。 在此调用中,呼叫管理器或 MCM 驱动程序传递:

  • 指示请求状态的NDIS_STATUS。

  • 标识 VC 的 NdisVcHandle

  • 指向包含 VC 调用参数的 CO_CALL_PARAMETERS 结构的指针。

如果信号协议允许,调用管理器或 MCM 驱动程序可以将修改后的调用参数传回客户端。 这些修改可以是与网络协商的产物,也可以由呼叫管理器或 MCM 驱动程序本身提供。 调用管理器或 MCM 驱动程序应通过设置CO_CALL_PARAMETERS结构中的CALL_PARAMETERS_CHANGED标志来指示已修改调用参数。

调用 Ndis(M)CmModifyCallQoSComplete 会导致 NDIS 调用客户端的 ProtocolClModifyCallQoSComplete 函数。 NDIS 将以下内容传递给 ProtocolClModifyCallQoSComplete

  • 指示客户请求更改 QoS 状态的 NDIS_STATUS。

  • 用于标识 VC 的 ProtocolVcContext 句柄。

  • 指向CO_CALL_PARAMETERS结构的指针,该结构包含调用管理器或 MCM 驱动程序传递给 Ndis(M)CmModifyCallQoSComplete 的调用参数。

如果在CO_CALL_PARAMETERS结构中设置了CALL_PARAMETERS_CHANGED标志,客户端必须检查返回的调用参数并确定修改是否可接受。 如果客户端调用 NdisClModifyCallQoS 成功, ProtocolClModifyCallQoSComplete 只需返回控件即可接受 QoS 更改。 否则,如果信号协议允许, ProtocolClModifyCallQoSComplete 可以与呼叫管理器进行进一步协商,只要客户端的开发人员对可能重新协商的数量施加了一定的合理限制。 或者,只要呼叫管理器拒绝更改 QoS 的请求,并且以前建立的 QoS 对客户端而言已变得不可接受,ProtocolClModifyCallQoSComplete 只需使用 NdisClCloseCall(见 Client-Initiated 请求关闭呼叫)即可拆解调用。