注册和打开地址系列

呼叫管理器必须为向面向连接的客户端提供呼叫管理器服务的每个 NIC 注册一个地址系列。 同样,MCM 驱动程序必须为它管理的 NIC 注册地址系列。

通过注册地址系列,呼叫管理器或 MCM 驱动程序会导致 NDIS 将呼叫管理器或 MCM 驱动程序的服务播发到绑定到适配器的所有面向连接的客户端。

如果面向连接的客户端可以使用由调用管理器或 MCM 驱动程序播发的服务,则可以使用呼叫管理器或 MCM 驱动程序打开地址系列。

从呼叫管理器注册地址系列

在其 ProtocolBindAdapterEx 函数使用 NdisOpenAdapterEx 绑定到基础微型端口驱动程序后,调用管理器调用 NdisCmRegisterAddressFamilyEx 为绑定注册地址系列 (请参阅下图) 。

说明向呼叫管理器注册和打开地址系列的过程的示意图。

调用 NdisCmRegisterAddressFamilyEx 播发呼叫管理器的特定信号服务。 每次调用 其 ProtocolBindAdapterEx 函数时,调用管理器都必须注册一个地址系列,并使用 NdisOpenAdapterEx 成功绑定到 NIC。

呼叫管理器可以在绑定到的所有微型端口驱动程序中支持多个地址系列。 呼叫管理器还可以在绑定到的单个 NIC 上支持多个地址系列。 调用管理器必须为绑定上的每个地址系列注册相同的入口点。 只有一个呼叫管理器可以为绑定到任何特定微型端口驱动程序的客户端支持特定类型的地址系列。 有关注册呼叫管理器入口点的详细信息,请参阅 CoNDIS 注册

从 MCM 驱动程序注册地址系列

MCM 驱动程序在向 NdisMRegisterMiniportDriver 注册其微型端口驱动程序入口点后,从其 MiniportInitializeEx 函数调用 NdisMCmRegisterAddressFamilyEx。 有关 regsitering 入口点的详细信息,请参阅 CoNDIS 注册。 MCM 驱动程序调用 NdisMCmRegisterAddressFamilyEx 一次,以将其服务播发到面向连接的客户端 (请参阅下图) 。

说明使用 MCM 驱动程序注册和打开地址系列的过程的关系图。

具有板载连接导向信号支持的 NIC 的微型端口驱动程序可以将自身注册为 MCM 驱动程序,即使呼叫管理器可能可用。 通过这样做,此类 MCM 驱动程序会抢占呼叫管理器作为该 NIC 的调用管理器。

打开地址系列

调用管理器或 MCM 驱动程序对 Ndis 的调用 (M) CmRegisterAddressFamily 会导致 NDIS 在绑定 (上调用每个面向连接的客户端的 ProtocolCoAfRegisterNotify 函数,如上图) 所示。

ProtocolCoAfRegisterNotify 检查地址系列数据,以确定客户端是否可以使用此特定 CM 或 MCM 驱动程序的服务。 客户端是否可以修改 (M) CM 提供的地址系列数据取决于调用管理器或 MCM 驱动程序的特定信号协议支持。

如果客户端认为提供的呼叫管理服务可以接受, ProtocolCoAfRegisterNotify 将为客户端分配每个 AF 上下文区域,并调用 NdisClOpenAddressFamilyExNdisClOpenAddressFamilyEx 不向 NDIS 注册客户端的面向连接的入口点。 有关向 NDIS 注册面向连接的入口点的详细信息,请参阅 CoNDIS 注册

调用 NdisClOpenAddressFamilyEx 会导致 NDIS 调用调用管理器的或 MCM 驱动程序的 ProtocolCmOpenAf 函数 (,如前面两个数字) 所示。 ProtocolCmOpenAf 确保客户端传入有效的地址系列,并分配和初始化必要的资源,以代表正在打开地址系列的此实例的客户端执行操作。 ProtocolCmOpenAf 还存储 NDIS 提供的 NdisAfHandle,该 NdisAfHandle 表示打开地址系列调用管理器和客户端之间的关联。

ProtocolCmOpenAf 可以同步或异步完成。 若要异步完成,调用管理器的 ProtocolCmOpenAf 函数调用 NdisCmOpenAddressFamilyComplete;MCM 驱动程序的 ProtocolCmOpenAf 函数调用 NdisMCmOpenAddressFamilyComplete。 调用 Ndis (M) CmOpenAddressFamilyComplete 会导致 NDIS 调用最初调用 NdisClOpenOpenAddressFamilyEx 的客户端的 ProtocolOpenAfComplete 函数。

如果客户端对 NdisClOpenAddressFamilyEx 的调用成功,则 NDIS 会向客户端返回 一个 NdisAfHandle,该 NdisAfHandle 表示打开地址系列的调用管理器和客户端之间的关联。

如果客户端接受传入调用,通常在成功调用 NdisClOpenAddressFamilyEx 后调用 NdisClRegisterSap,从其 ProtocolClOpenAfCompleteEx 函数注册一个或多个 SAP

如果客户端发出传出调用,则它可以在其 ProtocolClOpenAfCompleteEx 函数中创建一个或多个 VC,以预期其一个或多个客户端发出发出传出调用的请求。