NdisAllocateNetBufferAndNetBufferList 函数 (ndis/nblapi.h)
调用 NdisAllocateNetBufferAndNetBufferList 函数来分配和初始化使用预分配 NET_BUFFER 结构初始化的 NET_BUFFER_LIST 结构。
语法
NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateNetBufferAndNetBufferList(
[in] NDIS_HANDLE PoolHandle,
[in] USHORT ContextSize,
[in] USHORT ContextBackFill,
[in, optional] __drv_aliasesMem MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
参数
[in] PoolHandle
以前从
[in] ContextSize
NET_BUFFER_LIST_CONTEXT 结构中 的数据空间 量,以便为调用方保留数据空间。 ContextSize 必须是MEMORY_ALLOCATION_ALIGNMENT定义的值的倍数。
[in] ContextBackFill
调用方所需的 未使用的数据空间量(回填空间)。 NDIS 将此值添加到 ContextSize 并分配其他空间。 ContextBackFill 必须是MEMORY_ALLOCATION_ALIGNMENT定义的值的倍数。
[in, optional] MdlChain
指向 NDIS 用来初始化预先分配NET_BUFFER结构的 MDL 链的指针。 MdlChain 可以 NULL。
[in] DataOffset
从缓冲区的开头到 在 MDL 链中 使用的数据空间的开头的初始偏移量(以字节为单位)。 此偏移量之前的数据空间 未使用的数据空间。 因此,此值还表示 MDL 链中可用回填空间的初始量。 如果 MdlChainNULL,则 DataOffset 必须为 0。
[in] DataLength
在 MDL 链中使用的数据空间 的长度(以字节为单位)。 如果 MdlChain为 NULL,则 DataLength 必须为 0。
返回值
NdisAllocateNetBufferAndNetBufferList 返回指向分配NET_BUFFER_LIST结构的指针。 NET_BUFFER_LIST结构包括NET_BUFFER结构。 如果分配失败,则此指针 NULL。
言论
NdisAllocateNetBufferAndNetBufferList 函数分配的结构必须来自包含与预分配 NET_BUFFER 结构配对的 NET_BUFFER_LIST 结构的池。 若要创建此类池,必须调用 NdisAllocateNetBufferListPool 函数,其中 NET_BUFFER_LIST_POOL_PARAMETERS 结构的 fAllocateNetBuffer 成员设置为 TRUE,DataSize 成员设置为零。
如果预分配 NET_BUFFER 拥有 NET_BUFFER,则可以使用另一个 MDL 链重新初始化它,但 DataOffset、DataLength、CurrentMdl,以及 NET_BUFFER 中的 CurrentMdlOffset 字段必须与新的 MDL 链一致。
例如,如果原始 MDL 链包含 XDataLength,YDataOffset,并且 CurrentMdl 以原始 MDL 链中的第二个 MDL(M)开头,则 CurrentMdlOffsetZ。然后,NET_BUFFER_DATA 中的 MdlChain 字段需要指向一个新的 MDL 链,其中包含 X 的DataLength,Y'DataOffset。 如果 CurrentMdl 从新 MDL 链中的第三个 MDL(M')开始,CurrentMdlOffsetZ',并且以下宏需要用于设置 NET_BUFFER中的字段:
NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';
要求
要求 | 价值 |
---|---|
最低支持的客户端 | NDIS 6.0 及更高版本中受支持。 |
目标平台 | 普遍 |
标头 | ndis/nblapi.h (include ndis.h) |
库 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function(ndis),NdisAllocateNetBufferList(ndis),NdisAllocateNetBufferList_InitFail(ndis) |
另请参阅
NET_BUFFER_LIST_POOL_PARAMETERS
NdisAllocateNetBufferListPool