注册 SAP
如果客户端接受传入调用,其 ProtocolClOpenAfCompleteEx 函数通常通过调用 NdisClRegisterSap 向调用管理器注册一个或多个 SAP。
下图显示了注册 SAP 的呼叫管理器的客户端。
下图显示了注册 SAP 的 MCM 驱动程序的客户端。
通过调用 NdisClRegisterSap,客户端请求特定 SAP 上的传入调用的通知。 NDIS 将客户端提供的 SAP 信息转发到调用管理器或 MCM 驱动程序的 ProtocolCmRegisterSap 函数进行验证。 如果给定的 SAP 已在使用中,或者调用管理器或 MCM 驱动程序无法识别客户端提供的 SAP 规范,则调用管理器或 MCM 驱动程序会失败此请求。
在 ProtocolCmRegisterSap 中,调用管理器或 MCM 驱动程序可能与网络控制设备或其他特定于媒体的代理通信,以便在网络上为面向连接的客户端注册 SAP。 ProtocolCmRegisterSap 还存储表示 SAP 的 NDIS 提供的 NdisSapHandle 。
ProtocolCmRegisterSap 可以同步或异步完成。 若要异步完成,调用管理器的 ProtocolCmRegisterSap 函数调用 NdisCmRegisterSapComplete。 MCM 驱动程序的 ProtocolCmRegisterSap 函数调用 NdisMCmRegisterSapComplete。 调用 Ndis (M) CmRegisterSapComplete 会导致 NDIS 调用客户端的 ProtocolClRegisterSapComplete 函数。
如果客户端对 NdisClRegisterSap 的调用成功,则 NDIS 会向客户端返回表示 SAP 的 NdisSapHandle。
在呼叫管理器代表面向连接的客户端注册 SAP 后,它会通过调用 NdisCmDispatchIncomingCall 通知该客户端定向到该 SAP 的传入呼叫套餐。 MCM 驱动程序调用 NdisMCmDispatchIncomingCall (请参阅 指示传入呼叫) 。 即使 SAP 注册仍处于挂起状态,客户端也可以接收 SAP 上的传入调用;即,在调用其 ProtocolClRegisterSapComplete 函数之前。