重新汇编的 NET_BUFFER_LIST 结构

NDIS 驱动程序可以从现有 NET_BUFFER_LIST 结构创建重新组合NET_BUFFER_LIST结构。 重新组合的结构引用来自多个源 NET_BUFFER 结构的原始数据。 驱动程序可以使用这种类型的结构有效地将许多较小的缓冲区合并到单个大型缓冲区中。

下图显示了父NET_BUFFER_LIST结构和重新组合的子结构之间的关系:

说明父NET_BUFFER_LIST结构和重新组合子结构之间的关系的关系图。

上图包含一个父 NET_BUFFER_LIST 结构和一个派生自该父级的子结构。 父结构有一个 NET_BUFFER_LIST_CONTEXT 结构和三个附加了 MDL 的NET_BUFFER 结构。 父结构的父指针为 NULL ,表示它不是派生结构。

子NET_BUFFER_LIST结构具有一个附加了 MDL 的NET_BUFFER结构。 子NET_BUFFER_LIST结构具有指向父结构的指针。 NET_BUFFER_LIST_CONTEXT结构指针所在的 NULL 表示子级没有NET_BUFFER_LIST_CONTEXT结构。

NDIS 驱动程序调用 NdisAllocateReassembledNetBufferList 函数来重新组合碎片 NET_BUFFER_LIST 结构。 NDIS 使用重新组装 NET_BUFFER_LIST 结构分配新的NET_BUFFER结构和 MDL。 NDIS 不会为重新组装结构分配NET_BUFFER_LIST_CONTEXT结构。 重新组合NET_BUFFER结构和 MDL 描述的数据与父结构相同。 不会复制数据。

若要创建重新组装NET_BUFFER_LIST结构, NdisAllocateReassembledNetBufferList 将跳过每个父NET_BUFFER结构中 StartOffset 参数中指定的字节数。 NdisAllocateReassembledNetBufferList 将每个父NET_BUFFER结构中的剩余数据连接到一个重新组装NET_BUFFER结构的 MDL 链中。 NdisAllocateReassembledNetBufferList 撤退 (增加) 重新组装NET_BUFFER结构中的已用数据空间,以 DataOffsetDelta 中指定的量增加。

NDIS 驱动程序调用 NdisFreeReassembledNetBufferList 函数,以释放重新组装 NET_BUFFER_LIST 结构以及关联的 NET_BUFFER 结构和 MDL 链。

派生的 NET_BUFFER_LIST 结构