MINIPORT_CO_SEND_NET_BUFFER_LISTS回调函数 (ndis.h)

MiniportCoSendNetBufferLists 函数传输包含在指定链接 NET_BUFFER_LIST 结构列表中的网络数据。

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

语法

MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;

void MiniportCoSendNetBufferLists(
  [in] NDIS_HANDLE MiniportVcContext,
  [in] PNET_BUFFER_LIST NetBufferLists,
  [in] ULONG SendFlags
)
{...}

参数

[in] MiniportVcContext

微型端口驱动程序分配的上下文区域的句柄,微型端口驱动程序在其中维护其每个虚拟连接 (VC) 状态。 微型端口驱动程序从其 MiniportCoCreateVc 函数向 NDIS 提供此句柄。

[in] NetBufferLists

指向 NET_BUFFER_LIST 结构链接列表中的第一个 NET_BUFFER_LIST 结构的指针。 列表中的每个 NET_BUFFER_LIST 结构都描述了 NET_BUFFER 结构的列表。 列表中的每个 NET_BUFFER 结构都映射到内存描述符列表链(MDL)。 MDL 包含 MiniportCoSendNetBufferLists 传输的网络数据。

[in] SendFlags

定义发送作的属性的标志。 标志可以与按位 OR作结合使用。 若要清除所有标志,请将此参数设置为零。 MiniportCoSendNetBufferLists 支持以下标志:

NDIS_SEND_FLAGS_DISPATCH_LEVEL

如果当前 IRQL DISPATCH_LEVEL,则调用方可以选择设置此标志。 有关此标志的详细信息,请参阅 调度 IRQL 跟踪

NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK

NDIS 应检查环回。 默认情况下,NDIS 不会环回提交发送请求的驱动程序的数据。 过度的驱动程序可以通过设置 NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK 标志来替代此行为。 设置此标志时,NDIS 会标识包含与绑定接收条件匹配的数据的所有 NET_BUFFER 结构。 NDIS 指示 NET_BUFFER 结构,这些结构与过度的驱动程序匹配。 此标志不会影响在其他绑定上检查环回或环回。

返回值

没有

言论

CoNDIS 微型端口驱动程序需要 MiniportCoSendNetBufferLists 函数。 当过度的驱动程序调用 NdisCoSendNetBufferLists 函数,NDIS 调用绑定微型端口驱动程序的 MiniportCoSendNetBufferLists 函数。

NDIS 在 NetBufferLists 传递的 NET_BUFFER_LIST 结构链接列表的顺序表示微型端口驱动程序应传输网络数据的顺序。 此外,微型端口驱动程序应从多个 MiniportCoSendNetBufferLists 发送 NET_BUFFER_LIST 结构, 调用微型端口驱动程序接收结构的顺序。

CoNDIS 微型端口驱动程序必须接受 NDIS 发出的所有发送请求,方法是调用 MiniportCoSendNetBufferLists 函数。 如果微型端口驱动程序无法立即完成发送请求,驱动程序必须在队列中保留请求,直到可以完成请求。 当发送请求挂起时,微型端口驱动程序将保留 NET_BUFFER_LIST 结构和与 NET_BUFFER_LIST 结构关联的所有资源的所有权。

微型端口驱动程序必须调用 NdisMCoSendNetBufferListsComplete 函数来完成所有 CoNDIS 发送请求。 为了提高计算机性能,驱动程序可以创建包含来自多个发送请求 NET_BUFFER_LIST 结构的链接列表。 然后,驱动程序可以在单个调用中传递此类链接列表,以 NdisMCoSendNetBufferListsComplete

此外,应假定微型端口驱动程序在驱动程序调用 NdisMCoSendNetBufferListsComplete后,即无法访问 NET_BUFFER_LIST 结构和其他关联资源。

MiniportCoSendNetBufferLists 函数必须与访问相同队列的其他 MiniportXxx 函数同步对其内部网络数据队列的访问。 微型端口驱动程序可以使用旋转锁来同步对队列的访问。

协议驱动程序负责根据绑定微型端口驱动程序选择的中等类型来确定所需的网络数据。 但是,协议驱动程序可以提供网络数据,该数据指定小于所选介质的最小数据包大小。 在这种情况下,如果所选媒体对传输数据包大小施加最小长度要求,MiniportCoSendNetBufferLists 必须将数据包填充为零。

NDIS 在 IRQL<= DISPATCH_LEVEL 调用 MiniportCoSendNetBufferLists

示例

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

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

MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;

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

_Use_decl_annotations_
VOID
 MyCoSendNetBufferLists(
    NDIS_HANDLE  MiniportVcContext,
    PNET_BUFFER_LIST  NetBufferLists,
    ULONG  SendFlags
    )
  {...}

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

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

要求

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

另请参阅

MiniportCoCreateVc

NET_BUFFER

NET_BUFFER_LIST

NdisCoSendNetBufferLists

NdisMCoSendNetBufferListsComplete