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 句柄和由此或其他调用管理器提供的 AF 规范(也绑定到同一个基础微型端口驱动程序)再次调用 ProtocolCoAfRegisterNotify。 否则,ProtocolAfRegisterNotify 为客户端分配每 AF 上下文区域,并使用 AddressFamily 指针调用 NdisClOpenAddressFamilyEx。 如果此调用成功,则客户端已向 NDIS 注册其 ProtocolClXxx 函数,以便使用此调用管理器的服务进行后续面向连接的操作。

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

如果客户端接受传入调用,则客户端的 ProtocolCoAfRegisterNotify ProtocolClOpenAfCompleteEx 函数通常向调用管理器注册一个或多个 SAP。 打开该呼叫管理器的 AF 后,客户端可以继续分配每个 SAP 状态区域,并使用从 NdisClOpenAddressFamilyEx 获取的 NdisClRegisterSap 一次或多次调用 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