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 链来描述。
- (DataOffset 成员的值按 DataOffsetDelta 参数中指定的字节数减少) ,新NET_BUFFER结构的数据偏移量将回退。
- 如果 NDIS 必须分配内存以提供 DataOffsetDelta 中请求的数据空间,则它还应分配 DataBackFill 指定的额外空间。
调用 NdisFreeFragmentNetBufferList 函数,用于释放NET_BUFFER_LIST结构和以前通过调用 NdisAllocateFragmentNetBufferList 分配的所有相关NET_BUFFER结构和 MDL 链。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 NDIS 6.0 及更高版本中受支持。 |
目标平台 | 通用 |
标头 | ndis/nblapi.h (包括 ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function (ndis) 、NdisAllocateFragmentNetBufferList (ndis) 、NdisAllocateFragmentNetBufferList_InitFail (ndis) |