创建 VC

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

调用管理器或 MCM 驱动程序还可以启动 VC 的创建,该 VC 会将信号消息与网络组件(例如网络交换机)交换。

Client-Initiated创建 VC

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

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

diagram illustrating a client of a call manager initiating the creation of a vc.

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

diagram illustrating a client of an mcm driver initiating the creation of a vc.

当面向连接的调用管理器客户端调用 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 驱动程序演示) ) 。 在这种情况下, ProtocolCoCreateVc 为 VC 执行必要的资源分配和初始化。 由于 MCM 驱动程序不提供此类函数,因此 (内部调用或) MiniportCoCreateVc

调用Manager-Initiated创建 VC

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

diagram illustrating a call manager initiating the creation of a vc.

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

MCM Driver-Initiated创建 VC

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

diagram illustrating an mcm driver initiating the creation of a vc.

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

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

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