NdisAllocateFragmentNetBufferList 函数 (ndis/nblapi.h)
调用 NdisAllocateFragmentNetBufferList 函数,以基于现有NET_BUFFER_LIST结构中的数据创建新的分段 NET_BUFFER_LIST 结构。
语法
NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
[in] NET_BUFFER_LIST *OriginalNetBufferList,
NDIS_HANDLE NetBufferListPool,
NDIS_HANDLE NetBufferPool,
[in] ULONG StartOffset,
[in] ULONG MaximumLength,
[in] ULONG DataOffsetDelta,
[in] ULONG DataBackFill,
[in] ULONG AllocateFragmentFlags
);
参数
[in] OriginalNetBufferList
指向现有NET_BUFFER_LIST结构的指针。
NetBufferListPool
从调用获取的句柄 NdisAllocateNetBufferListPool 函数。
NetBufferPool
以前从调用返回的NET_BUFFER结构池句柄 NdisAllocateNetBufferPool。
[in] StartOffset
每个 NET_BUFFER 结构中数据的起始位置的附加字节偏移量。 此偏移量除了每个NET_BUFFER结构中指定的 DataOffset 成员的值外。
[in] MaximumLength
新NET_BUFFER_LIST结构中每个片段的最大长度(以字节为单位)。 每个片段由NET_BUFFER结构描述。
[in] DataOffsetDelta
NDIS 应在新的NET_BUFFER结构中提供的额外 已用数据空间 量。
[in] DataBackFill
除了 DataOffsetDelta 参数的值以外,还需要分配的数据空间量。 如果 NDIS 必须分配内存以提供 DataOffsetDelta中请求的数据空间,则它还应分配 DataBackFill 指定的额外空间。
[in] AllocateFragmentFlags
可与 OR作结合使用的 NDIS 标志。 将此参数设置为零。 目前没有为此函数定义的标志。
返回值
NdisAllocateFragmentNetBufferList 返回指向新碎片NET_BUFFER_LIST结构的指针。 如果分配失败,则返回值 NULL。
言论
NdisAllocateFragmentNetBufferList 分配并初始化新的片段 NET_BUFFER_LIST 结构和 NET_BUFFER 结构,这些结构描述调用方传递给 NdisAllocateFragmentNetBufferList的NET_BUFFER_LIST结构所描述的数据。
如果片段NET_BUFFER_LIST结构应具有与给定池关联的属性,则调用方必须在 NetBufferListPoolHandle 或 NetBufferPoolHandle 参数中指定池句柄。 例如,NET_BUFFER_LIST结构的 ProtocolType 成员与池相关联。
对于指定源NET_BUFFER_LIST结构中的每个NET_BUFFER结构,NDIS 将创建片段NET_BUFFER结构,如下所示:
- NDIS 创建从源NET_BUFFER结构中 使用的数据空间 开头开始的片段,并偏移 StartOffset 参数中指定的值。
- NDIS 将源NET_BUFFER结构中的 已用数据空间(在考虑 StartOffset 后)划分为片段。
- 每个片段 已用数据空间的长度小于或等于 MaximumLength 参数中指定的值。 最后一个片段的 已用数据空间 小于 MaximumLength。
- 每个片段由新的NET_BUFFER结构和一组新的 MDL 链描述。
- 新的NET_BUFFER结构的数据偏移量将减少(DataOffset 成员的值会减少),具体要减少 DataOffsetDelta 参数中指定的字节数。
- 如果 NDIS 必须分配内存以提供 DataOffsetDelta中请求的数据空间,则它还应分配 DataBackFill 指定的额外空间。
调用 NdisFreeFragmentNetBufferList 函数释放NET_BUFFER_LIST结构以及以前通过调用 NdisAllocateFragmentNetBufferList分配的所有关联NET_BUFFER结构和 MDL 链。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 普遍 |
标头 | ndis/nblapi.h (include ndis.h) |
库 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function(ndis),NdisAllocateFragmentNetBufferList(ndis),NdisAllocateFragmentNetBufferList_InitFail(ndis) |