停用 VC
呼叫管理器调用 NdisCmDeactivateVc 作为关闭传出或传入呼叫的重要步骤,通常是在与网络组件进行数据包交换后,该网络组件会断开呼叫 (请参阅 客户端发起的关闭呼叫的请求 和 传入请求关闭呼叫) 。 MCM 驱动程序通过调用 NdisMCmDeactivateVc 执行相同的操作。
调用 NdisCmDeactivateVc 会导致 NDIS 调用基础微型端口驱动程序的 MiniportCoDeactivateVc 函数, (请参阅下图) 。 MiniportCoDeactivateVc 与其网络适配器通信以终止此 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 函数完成停用序列。
MCM 驱动程序不调用 NdisMCmDeactivateVc 来停用用于在 MCM 驱动程序和网络组件(如交换机)之间交换信号消息的 VC。 MCM 驱动程序在内部停用信号 VC,而无需调用任何 NdisXxx 函数。