创建 VC

进行传出调用之前,面向连接的客户端会启动创建虚拟连接 (VC) 。 在指示对面向连接的客户端的传入调用之前,调用管理器或 MCM 驱动程序会启动 VC 的创建。 设置并激活 VC 后,可以在 VC 上传输或接收客户端数据。

呼叫管理器或 MCM 驱动程序还可以启动 VC 的创建,在该 VC 上与网络组件(如网络交换机)交换信号消息。

Client-Initiated 创建 VC

在使用 NdisClMakeCall进行调用之前,面向连接的客户端调用 NdisCoCreateVc 以启动 VC 的创建。

下图显示了发起创建 VC 的调用管理器的客户端。

显示发起创建 VC 的调用管理器的客户端的关系图。

下图显示了启动创建 VC 的 MCM 驱动程序的客户端。

显示启动创建 VC 的 MCM 驱动程序的客户端的关系图。

当调用管理器的面向连接的客户端调用 NdisCoCreateVc 时,NDIS 将调用作为同步操作,调用管理器的 ProtocolCoCreateVc 函数和基础微型端口驱动程序的 MiniportCoCreateVc 函数 (参阅本主题中的第一个图) 。 NDIS 将表示 VC 的 NdisVcHandle 传递给 ProtocolCoCreateVcMiniportCoCreateVc。 如果调用 NdisCoCreateVc 成功,NDIS 会将 NdisVcHandle 返回到 NdisCoCreateVc

ProtocolCoCreateVc 分配和初始化调用管理器在将激活的 VC 上执行后续操作所需的任何动态资源和结构。 MiniportCoCreateVc 分配和初始化微型端口驱动程序维护有关 VC 的状态信息所需的任何资源。 ProtocolCoCreateVcMiniportCoCreateVc 都存储 NdisVcHandle

当 MCM 驱动程序的面向连接的客户端时,对 NdisCoCreateVc 的调用会导致 NDIS 调用 MCM 驱动程序的 ProtocolCoCreateVc 函数, (请参阅 Client-Initiated 创建 VC (MCM 驱动程序 Present) ) 。 在这种情况下, ProtocolCoCreateVc 为 VC 执行必要的资源分配和初始化。 由于 MCM 驱动程序不提供此类函数,因此无法 (内部调用或以其他方式) MiniportCoCreateVc

调用 Manager-Initiated 创建 VC

在使用 NdisCmDispatchIncomingCall 指示对面向连接的客户端的传入调用之前,呼叫管理器调用 NdisCoCreateVc 以启动 VC 的创建 (请参阅下图) 。

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

当调用管理器调用 NdisCoCreateVc 时,NDIS 以同步操作的形式调用注册了正在接收调用的 SAP 的面向连接的客户端的 ProtocolCoCreateVc 函数,以及基础微型端口的 MiniportCoCreateVc 函数。 NDIS 将表示 VC 的 NdisVcHandle 传递给 ProtocolCoCreateVcMiniportCoCreateVc。 如果调用 NdisCoCreateVc 成功,NDIS 会将 NdisVcHandle 返回到 NdisCoCreateVc

MCM Driver-Initiated 创建 VC

在使用 NdisMCmDispatchIncomingCall 指示对面向连接的客户端的传入调用之前,MCM 驱动程序调用 NdisMCmCreateVc 以启动创建 VC (请参阅下图) 。

显示启动创建 VC 的 MCM 驱动程序的关系图。

当 MCM 驱动程序调用 NdisMCmCreateVc 时,NDIS 在 NdisMCmCreateVc 返回之前会调用作为同步操作,即面向连接的客户端的 ProtocolCoCreateVc 函数,该客户端注册了正在接收调用的 SAP。 NDIS 将表示 VC 的 NdisVcHandle 传递到 ProtocolCoCreateVc。 如果对 NdisMCmCreateVc 的调用成功,NDIS 会将 NdisVcHandle 返回到 NdisMCmCreateVc

ProtocolCoCreateVc 分配和初始化客户端在 VC 上执行后续操作所需的任何动态资源和结构。 ProtocolCoCreateVc 还存储 NdisVcHandle

请注意,当 MCM 驱动程序创建用于与网络组件交换信号消息的 VC 时,它不使用 NdisXxx 调用来创建 VC。 事实上,MCM 驱动程序不会使用 NdisXxx 调用来创建、激活、停用或删除此类 VC。 相反,MCM 驱动程序在内部执行这些操作。 因此,此类 VC 对 NDIS 是不透明的。