NdisAllocateNetBufferPool 函数 (ndis/nblapi.h)

调用 NdisAllocateNetBufferPool 函数来分配 NET_BUFFER 结构的池。

语法

NDIS_EXPORTED_ROUTINE NDIS_HANDLE NdisAllocateNetBufferPool(
  [in, optional] NDIS_HANDLE                      NdisHandle,
  [in]           NET_BUFFER_POOL_PARAMETERS const *Parameters
);

参数

[in, optional] NdisHandle

调用方初始化期间获取的 NDIS 句柄。

[in] Parameters

指向定义池参数的NET_BUFFER_POOL_PARAMETERS结构的指针。 该结构的定义如下:

typedef struct _NET_BUFFER_POOL_PARAMETERS {
  NDIS_OBJECT_HEADER  Header;
  ULONG  PoolTag;
  ULONG  DataSize;
} NET_BUFFER_POOL_PARAMETERS, *PNET_BUFFER_POOL_PARAMETERS;

此结构包括以下成员:

NET_BUFFER_POOL_PARAMETERS结构的 NDIS_OBJECT_HEADER 结构。 将 标头 指定为NDIS_OBJECT_TYPE_DEFAULT、修订 成员NET_BUFFER_POOL_PARAMETERS_REVISION_1以及 大小 成员NDIS_SIZEOF_NET_BUFFER_POOL_PARAMETERS_REVISION_1的结构 类型 成员。

PoolTag

调用方在此池中分配 NET_BUFFER 结构时使用的内核池标记。 该标记是一个字符串,用单引号分隔,最多四个字符,通常按相反顺序指定。 内核池标记可帮助 NDIS 识别从此池分配的NET_BUFFER结构的所有者。

DataSize

与此池关联的数据缓冲区的默认数据大小。 如果调用方调用此值,则调用方必须设置此值 NdisAllocateNetBufferMdlAndData 函数。 NDIS 使用此值设置为NET_BUFFER结构分配的数据缓冲区的大小。 如果调用方不使用此功能,则此值应设置为零。

返回值

NdisAllocateNetBufferPool 将句柄返回到 NDIS 分配的NET_BUFFER结构池。 如果分配失败,则此句柄 NULL。 此句柄是后续调用 NDIS 函数所需的参数,用于从此池中分配和释放NET_BUFFER结构。

言论

调用以下函数,从NET_BUFFER结构池中分配 NET_BUFFER 结构。

NdisAllocateNetBuffer

NdisAllocateNetBufferMdlAndData
注意,必须从 NDIS 缓冲池分配NET_BUFFERNET_BUFFER_LIST 结构。 驱动程序不得从其专用内存池或堆栈分配和初始化NET_BUFFER或NET_BUFFER_LIST结构。
 
可以在创建NET_BUFFER结构池时调用 NdisAllocateNetBufferPool 并设置 DataSize 值。 在这种情况下,MDL 和数据会预先分配调用方从池中分配的每个NET_BUFFER结构。 必须调用 NdisAllocateNetBufferMdlAndData 函数来从此类池分配NET_BUFFER结构。

使用 NdisAllocateNetBufferMdlAndData 分配的 MDL 和数据缓冲区不应与NET_BUFFER结构分开释放。 调用 NdisFreeNetBuffer 函数时,可以使用NET_BUFFER结构释放此类结构。

调用 NdisFreeNetBufferPool 函数,以释放使用 NdisAllocateNetBufferPool创建的NET_BUFFER结构池。

要求

要求 价值
最低支持的客户端 NDIS 6.0 及更高版本中受支持。
目标平台 普遍
标头 ndis/nblapi.h (include ndis.h)
Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function(ndis),NdisAllocateNetBufferPool(ndis),NdisAllocateNetBufferPool_InitFail(ndis)

另请参阅

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBuffer

NdisAllocateNetBufferMdlAndData

NdisFreeNetBuffer

NdisFreeNetBufferPool