PROTOCOL_CO_AF_REGISTER_NOTIFY回调函数 (ndis.h)

ProtocolCoAfRegisterNotify 函数由面向连接的 NDIS 客户端使用。 所有面向连接的 NDIS 客户端都必须具有完全正常运行 的 ProtocolCoAfRegisterNotify 函数。 独立连接型调用管理器已注册了仅返回控制权的 ProtocolCoAfRegisterNotify 函数。

注意 必须使用 PROTOCOL_CO_AF_REGISTER_NOTIFY 类型声明函数。 有关详细信息,请参阅以下示例部分。
 

语法

PROTOCOL_CO_AF_REGISTER_NOTIFY ProtocolCoAfRegisterNotify;

VOID() ProtocolCoAfRegisterNotify(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PCO_ADDRESS_FAMILY AddressFamily
)
{...}

参数

[in] ProtocolBindingContext

指定客户端分配的上下文区域的句柄,客户端协议在其中维护每个绑定的运行时状态。 客户端的 ProtocolBindAdapterEx 函数在调用 NdisOpenAdapterEx 时提供了此句柄。

[in] AddressFamily

指向描述调用管理器提供的信号协议支持的缓冲区的指针,该缓冲区仅通过调用向 NDIS 注册了这些服务 NdisCmRegisterAddressFamilyEx NdisMCmRegisterAddressFamilyEx.

返回值

备注

对 ProtocolCoAfRegisterNotify 的调用在客户端绑定到的基础连接型 NIC 上播发特定调用管理器或 MCM 驱动程序的调用管理服务。

ProtocolCoAfRegisterNotify 检查 AddressFamily 中的数据,以确定客户端是否可以使用此特定调用管理器的服务。 客户端是否可以在 AddressFamily 中对 (M) CM 提供的数据进行修改取决于调用管理器的特定信号协议支持。

如果客户端发现提供的调用管理服务不能接受,ProtocolCoAfRegisterNotify 将返回控制权,NDIS 可能会使用相同的 ProtocolBindingContext 句柄再次调用 ProtocolCoAfRegisterNotify,以及此或另一个调用管理器提供的 AF 规范也绑定到同一基础微型端口驱动程序。 否则,ProtocolAfRegisterNotify 为客户端分配每 AF 上下文区域,并使用 AddressFamily 指针调用 NdisClOpenAddressFamilyEx 如果此调用成功,则客户端已使用 NDIS 注册其 ProtocolClXxx 函数,以便使用此调用管理器的服务执行后续连接导向操作。

例如, ProtocolCoAfRegisterNotifyProtocolClOpenAfCompleteEx 可能会调用 NdisInitializeNPagedLookasideList 一次或多次用于准备每个 SAP、每 VC 和/或每方上下文区域的动态分配和发布,客户端随后需要这些内容。

如果接受传入呼叫,则客户端的 ProtocolCoAfRegisterNotify ProtocolClOpenAfCompleteEx 函数通常向调用管理器注册一个或多个 SA。 打开该调用管理器的 AF 后,客户端可能会继续分配每个 SAP 状态区域,并使用从 NdisClOpenAddressFamilyEx 获取的 NdisAfHandle 调用 NdisClRegisterSap 一次或多次。 如果发出传出调用,客户端可能会继续分配每 VC 状态区域,并使用 NdisCoCreateVc 创建 VC,以便从其自己的客户端发出传入请求,以便向远程节点发出传出调用。

示例

若要定义 ProtocolCoAfRegisterNotify 函数,必须先提供一个函数声明,用于标识要定义的函数的类型。 Windows 为驱动程序提供了一组函数类型。 使用函数类型声明函数有助于 对驱动程序进行代码分析静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,这是编写 Windows 操作系统驱动程序的要求。

例如,若要定义名为“ MyCoAfRegisterNotify”的 ProtocolCoAfRegisterNotify 函数,请使用 PROTOCOL_CO_AF_REGISTER_NOTIFY 类型,如以下代码示例所示:

PROTOCOL_CO_AF_REGISTER_NOTIFY MyCoAfRegisterNotify;

然后,按如下所示实现函数:

_Use_decl_annotations_
VOID
 MyCoAfRegisterNotify(
    NDIS_HANDLE  ProtocolBindingContext,
    PCO_ADDRESS_FAMILY  AddressFamily
    )
  {...}

PROTOCOL_CO_AF_REGISTER_NOTIFY函数类型在 Ndis.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 Use_decl_annotations 批注添加到函数定义中。 Use_decl_annotations批注可确保使用应用于头文件中PROTOCOL_CO_AF_REGISTER_NOTIFY函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 NDIS 驱动程序的函数角色类型声明函数

有关 Use_decl_annotations的信息,请参阅 批注函数行为

要求

   
最低受支持的客户端 支持 NDIS 6.0 和 NDIS 5.1 驱动程序 (请参阅 Windows Vista 中的 ProtocolCoAfRegisterNotify (NDIS 5.1) ) 。 支持 NDIS 5.1 驱动程序 (请参阅 Windows XP 中的 ProtocolCoAfRegisterNotify (NDIS 5.1) ) 。
目标平台 Windows
标头 ndis.h (包括 Ndis.h)
IRQL PASSIVE_LEVEL

请参阅

CO_ADDRESS_FAMILY

NdisClOpenAddressFamilyEx

NdisClRegisterSap

NdisCmRegisterAddressFamilyEx

NdisCoCreateVc

NdisInitializeNPagedLookasideList NdisMCmRegisterAddressFamilyEx

NdisOpenAdapterEx

ProtocolBindAdapterEx

ProtocolClOpenAfCompleteEx