客户端发出的更改呼叫参数请求
客户端请求更改服务质量, (使用 NdisClModifyCallQoS (VC) 的活动虚拟连接上的 QoS) 。
下图显示了请求更改服务质量的调用管理器的客户端。
下图显示了请求更改服务质量的 MCM 驱动程序的客户端。
在调用 NdisClModifyCallQoS 时,客户端提供:
标识 VC 的 NdisVcHandle 参数。
指向包含客户端请求的调用参数 的CO_CALL_PARAMETERS 结构的指针。
客户端可以请求更改 QoS 的情况由信号协议确定。
调用 NdisClModifyCallQoS 会导致 NDIS 调用调用管理器的 或 MCM 驱动程序的 ProtocolCmModifyCallQoS 函数,该函数输入客户端传递给 NdisClModifyCallQoS 的 NdisVcHandle 和缓冲CO_CALL_PARAMETERS结构。 ProtocolCmModifyQoS 与网络控制设备或其他媒体特定的代理通信(其媒体需要),以修改已建立的虚拟连接的特定于媒体的调用参数。
与网络通信并确定更改成功后,调用管理器必须调用 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:
一个NDIS_STATUS,指示客户端更改 QoS 的请求的状态。
用于标识 VC 的 ProtocolVcContext 句柄。
指向CO_CALL_PARAMETERS结构的指针,该结构包含由调用管理器或 MCM 驱动程序传递到 Ndis (M) CmModifyCallQoSComplete 的调用参数。
如果在 CO_CALL_PARAMETERS 结构中设置了CALL_PARAMETERS_CHANGED标志,则客户端必须检查返回的调用参数,并确定修改是否可接受。 如果客户端调用 NdisClModifyCallQoS 成功, 则 ProtocolClModifyCallQoSComplete 只需返回控件即可接受 QoS 更改。 否则, ProtocolClModifyCallQoSComplete 可以与呼叫管理器进行进一步协商(如果信号协议允许),并且只要客户端的开发人员对可能的重新协商次数设置一些合理的限制。 或者, ProtocolClModifyCallQoSComplete 只需使用 NdisClClCloseCall (请参阅 客户端发起的关闭呼叫) ,只要调用管理器拒绝更改 QoS 的请求,并且以前建立的 QoS 对客户端来说不可接受。