PROTOCOL_CM_OPEN_AF回调函数 (ndis.h)

需要 ProtocolCmOpenAf 函数。 此函数为调用管理器分配按打开的资源,以便与打开地址系列的面向连接的 NDIS 客户端进行交互。

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

语法

PROTOCOL_CM_OPEN_AF ProtocolCmOpenAf;

NDIS_STATUS ProtocolCmOpenAf(
  [in]  NDIS_HANDLE CallMgrBindingContext,
  [in]  PCO_ADDRESS_FAMILY AddressFamily,
  [in]  NDIS_HANDLE NdisAfHandle,
  [out] PNDIS_HANDLE CallMgrAfContext
)
{...}

参数

[in] CallMgrBindingContext

对于非集成调用管理器,CallMgrBindingContext 指定调用管理器分配的上下文区域的句柄,其中调用管理器维护其每个绑定状态信息。 调用管理器在调用 NdisOpenAdapterEx时提供了此句柄。

对于集成呼叫管理器(MCM),CallMgrBindingContext 指定微型端口分配的上下文区域的句柄,微型端口在其中维护其每个适配器的状态信息。 微型端口在其 NdisMSetAttributesEx 调用(对于 5.x 驱动程序)或其 NdisMSetMiniportAttributes 调用(适用于 6.x 驱动程序)中提供了此句柄。

[in] AddressFamily

指定客户端正在打开的地址系列。 此地址系列在呼叫时由呼叫管理器注册 NdisCmRegisterAddressFamilyEx.

[in] NdisAfHandle

指定 NDIS 提供的唯一标识此地址系列实例的句柄。 此句柄对调用管理器不透明,并保留供系统使用。

[out] CallMgrAfContext

指定呼叫管理器提供的上下文区域的句柄,在该区域中,呼叫管理器会保留有关它提供的地址系列打开的状态。

返回值

ProtocolCmOpenAf 返回其作的状态,如下所示之一:

返回代码 描述
NDIS_STATUS_SUCCESS
指示调用管理器已成功分配并初始化接受来自客户端到此地址系列的请求所需的任何资源。
NDIS_STATUS_PENDING
指示正在异步处理请求的作。 呼叫管理器必须呼叫 NdisCmOpenAddressFamilyComplete 已完成其所有 open-AF作,以向 NDIS(和客户端)指示作已完成。
NDIS_STATUS_RESOURCES
指示由于缺少可用的系统资源(如内存),调用管理器无法完成其必要的作。
NDIS_STATUS_XXX
指示调用管理器无法将自身设置为可以接受来自客户端的请求以对此地址系列进行作的状态。 这可能是从另一个 NDIS 库函数传播的错误状态,或者由驱动程序编写器确定的任何错误状态。

言论

ProtocolCmOpenAf 执行调用管理器编写者认为有必要代表打开此地址系列实例的客户端执行作所需的动态资源和结构分配。 此类资源包括但不限于内存缓冲区、数据结构、事件和其他类似的资源。 在将控件返回到 NDIS 之前,调用管理器还应初始化任何相关的每打开数据。

当呼叫管理器分配其按打开的状态区域时,应在 CallMgrAfContext 句柄中设置状态区域的地址,然后再将控制权返回到 NDIS。 为此,请取消引用 CallMgrAfContext 并将指向数据区域的指针存储为句柄的值。 例如:

*CallMgrAfContext = SomeBuffer;

如果 ProtocolCmOpenAf 无法分配它需要代表客户端打开此地址系列执行后续请求所需的每打开资源,则应释放为其分配的所有资源,并使用NDIS_STATUS_RESOURCES将控制权返回到 NDIS。

如果 ProtocolCmOpenAf 已完成其所需作,并且 CM 已准备好接受来自客户端的请求,ProtocolCmOpenAf 应尽快返回具有NDIS_STATUS_SUCCESS状态的控制。

示例

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

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

PROTOCOL_CM_OPEN_AF MyCmOpenAf;

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

_Use_decl_annotations_
NDIS_STATUS
 MyCmOpenAf(
    NDIS_HANDLE  CallMgrBindingContext,
    PCO_ADDRESS_FAMILY  AddressFamily,
    NDIS_HANDLE  NdisAfHandle,
    PNDIS_HANDLE  CallMgrAfContext
    )
  {...}

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

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

要求

要求 价值
最低支持的客户端 Windows Vista 中支持 NDIS 6.0 和 NDIS 5.1 驱动程序(请参阅 ProtocolCmOpenAf (NDIS 5.1) 。 Windows XP 中支持 NDIS 5.1 驱动程序(请参阅 ProtocolCmOpenAf (NDIS 5.1)。
目标平台 窗户
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

NdisClOpenAddressFamilyEx

NdisCmOpenAddressFamilyComplete NdisCmRegisterAddressFamilyEx

NdisOpenAdapterEx