NDIS_SWITCH_ALLOCATE_NET_BUFFER_LIST_FORWARDING_CONTEXT回调函数 (ndis.h)

AllocateNetBufferListForwardingContext 函数为可扩展交换机中的发送或接收操作准备NET_BUFFER_LIST结构。

语法

NDIS_SWITCH_ALLOCATE_NET_BUFFER_LIST_FORWARDING_CONTEXT NdisSwitchAllocateNetBufferListForwardingContext;

NDIS_STATUS NdisSwitchAllocateNetBufferListForwardingContext(
  [in]      NDIS_SWITCH_CONTEXT NdisSwitchContext,
  [in, out] PNET_BUFFER_LIST NetBufferList
)
{...}

参数

[in] NdisSwitchContext

一个NDIS_SWITCH_CONTEXT值,该值包含 Hyper-V 可扩展交换机扩展所附加到的可扩展交换机模块的句柄。 当扩展调用 NdisFGetOptionalSwitchHandlers 时,将通过 NdisSwitchContext 参数返回此句柄。

[in, out] NetBufferList

指向 NET_BUFFER_LIST 结构链接列表的指针。

返回值

如果调用成功,函数将返回NDIS_STATUS_SUCCESS。 否则,它将返回在 Ndis.h 中定义的 NDIS_STATUS_Xxx 错误代码。

注解

可扩展交换机扩展可以在可扩展交换机数据路径中引发数据包发送操作。 例如,扩展可以将数据包发送到可扩展交换机上的任何端口。 有关此数据路径的详细信息,请参阅 Hyper-V 可扩展交换机数据路径

在扩展调用 NdisAllocateNetBufferListNdisAllocateCloneNetBufferList 从其 NET_BUFFER_LIST 池创建或克隆数据包后,扩展必须调用 AllocateNetBufferListForwardingContext 函数。 此函数 为指定的NET_BUFFER_LIST 结构分配和初始化带外 (OOB) 可扩展交换机转发上下文。 有关此上下文的详细信息,请参阅 Hyper-V 可扩展交换机转发上下文

扩展必须遵循以下准则,以便通过 AllocateNetBufferListForwardingContext 函数分配转发上下文:

  • 扩展调用 NdisAllocateNetBufferList ,以分配扩展 NET_BUFFER_LIST 池中的数据包,以便通过可扩展交换机执行发送或接收操作。 在扩展初始化数据包的源和目标端口之前,它必须调用 AllocateNetBufferListForwardingContext

    有关如何指定源和目标可扩展交换机端口的详细信息,请参阅 管理 Hyper-V 可扩展交换机源和目标端口数据

  • 在扩展调用 AllocateNetBufferListForwardingContext 之前,它必须将每个分配NET_BUFFER_LIST结构的 SourceHandle 成员设置为标识扩展的句柄值。 当 NDIS 调用扩展的 FilterAttach 函数时,扩展通过 NdisFilterHandle 参数接收此句柄。
  • 发送操作完成后,扩展必须调用 FreeNetBufferListForwardingContext 函数来解除分配转发上下文的资源。 扩展必须先调用此函数,然后才能调用 NdisFreeNetBufferList ,以便将数据包返回到其 NET_BUFFER_LIST 池。
  • 如果扩展正在克隆数据包,则必须调用 CopyNetBufferListInfo ,以将转发上下文从原始数据包复制到克隆的数据包。 扩展必须在调用 AllocateNetBufferListForwardingContext 后执行此操作。
有关如何发起发送操作的详细信息,请参阅 筛选模块发送和接收操作
注意 如果 NetBufferList 参数包含指向多个 NET_BUFFER_LIST 结构的链接列表的指针,则列表中只有第一个 NET_BUFFER_LIST 结构为其分配了转发上下文。
 

要求

要求
最低受支持的客户端 在 NDIS 6.30 及更高版本中受支持。
目标平台 桌面
标头 ndis.h (包括 Ndis.h)
IRQL <= DISPATCH_LEVEL

另请参阅

CopyNetBufferListInfo

FilterAttach

FreeNetBufferListForwardingContext

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBufferList

NdisFGetOptionalSwitchHandlers

NdisFreeNetBufferList