停用 VC

呼叫管理器调用 NdisCmDeactivateVc 作为关闭传出或传入呼叫的重要步骤,通常是在与网络组件进行数据包交换后,该网络组件会断开呼叫 (请参阅 客户端发起的关闭呼叫的请求传入请求关闭呼叫) 。 MCM 驱动程序通过调用 NdisMCmDeactivateVc 执行相同的操作。

调用 NdisCmDeactivateVc 会导致 NDIS 调用基础微型端口驱动程序的 MiniportCoDeactivateVc 函数, (请参阅下图) 。 MiniportCoDeactivateVc 与其网络适配器通信以终止此 VC (的所有通信,例如,清除适配器上的接收或发送缓冲区) 。

显示调用管理器启动 VC 停用的示意图。

在停用 VC 之前,微型端口驱动程序必须完成 VC 上所有挂起的传输。 也就是说,微型端口驱动程序必须等到它完成所有正在进行的发送,并且直到它指示的所有接收数据包都返回到它。 停用 VC 后,微型端口驱动程序无法指示在 VC 上接收或传输发送。

请注意, MiniportCoDeactivateVc 不会删除 VC。 创建者 (客户端、调用管理器或 MCM 驱动程序) 不会重用的特定 VC 调用 NdisCoDeleteVc销毁该 VC。 停用的 VC 可由面向连接的客户端、调用管理器或 MCM 驱动程序 重新激活

MiniportCoDeactivateVc 可以同步或异步完成。 调用 NdisMCoDeactivateVcComplete。 导致 NDIS 调用最初请求 VC 停用的调用管理器的 ProtocolCmDeactivateVcComplete 函数。 完成停用意味着激活时使用的 VC 的所有调用参数不再有效。 禁止进一步使用 VC,除非使用一组新的调用参数重新激活它。

MCM 驱动程序对 NdisMCmDeactivateVc 的调用通知 NDIS 它已停用 VC 或更改了已建立的 VC 上的调用参数 (请参阅下图) 。 NDIS 通过调用 MCM 驱动程序的 ProtocolCmDeactivateVcComplete 函数完成停用序列。

说明启动 VC 停用的 MCM 驱动程序的关系图。

MCM 驱动程序不调用 NdisMCmDeactivateVc 来停用用于在 MCM 驱动程序和网络组件(如交换机)之间交换信号消息的 VC。 MCM 驱动程序在内部停用信号 VC,而无需调用任何 NdisXxx 函数。