NdisAllocateNetBuffer 函数 (ndis/nblapi.h)
调用 NdisAllocateNetBuffer 函数以从 NET_BUFFER 结构池中分配和初始化 NET_BUFFER 结构。
语法
NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
[in] NDIS_HANDLE PoolHandle,
[in, optional] MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
参数
[in] PoolHandle
以前从调用返回的 NET_BUFFER 结构池句柄 NdisAllocateNetBufferPool。
[in, optional] MdlChain
指向 MDL 链的指针,NDIS 使用该链初始化新的 NET_BUFFER 结构。 MdlChain 可以为 NULL。
[in] DataOffset
从缓冲区开始到 MDL 链中 已用数据空间 开始的初始偏移量(以字节为单位)。 在此偏移量之前的数据空间是 未使用的数据空间。 因此,此值还表示 MDL 链中可用回填空间的初始量。 如果 MdlChain 为 NULL, 则 DataOffset 必须为 0。
[in] DataLength
MDL 链中 已用数据空间的长度(以字节为单位)。 如果 MdlChain 为 NULL, 则 DataLength 必须为 0。
返回值
NdisAllocateNetBuffer 返回指向 NDIS 分配 的NET_BUFFER 结构的指针。 如果分配失败,则此指针为 NULL。
注解
调用 NdisFreeNetBuffer 以释放从 NET_BUFFER 结构池分配 的NET_BUFFER 结构。
例如,如果原始 MDL 链包含 XDataLength 和 YDataOffset,而 CurrentMdl 以原始 MDL 链中的第二个 MDL (M) 开头,则 CurrentMdlOffset 为 Z。然后,NET_BUFFER_DATA中的 MdlChain 字段需要指向包含 X'DataLength 和 Y'DataOffset 的新 MDL 链。 如果 CurrentMdl 以新 MDL 链中的第三个 MDL (M') 开头, 则 CurrentMdlOffset 为 Z',并且需要使用以下宏在 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 (包括 ndis.h) |
Library | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | Irql_NetBuffer_Function (ndis) , NdisAllocateNetBuffer (ndis) |