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结构。 将 Header 指定的结构的 Type 成员设置为 NDIS_OBJECT_TYPE_DEFAULT,将 Revision 成员设置为 NET_BUFFER_POOL_PARAMETERS_REVISION_1,将 Size 成员设置为 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_BUFFER和 NET_BUFFER_LIST 结构。 驱动程序不得从其专用内存池或堆栈中分配和初始化NET_BUFFER或NET_BUFFER_LIST结构。
 
创建NET_BUFFER结构池时,可以调用 NdisAllocateNetBufferPool 并设置 DataSize 值。 在这种情况下,MDL 和数据会预先分配调用方从池中分配的每个NET_BUFFER结构。 必须调用 NdisAllocateNetBufferMdlAndData 函数,才能从此类池中分配NET_BUFFER结构。

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

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

要求

要求
最低受支持的客户端 在 NDIS 6.0 及更高版本中受支持。
目标平台 通用
标头 ndis/nblapi.h (包括 ndis.h)
Library Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 Irql_NetBuffer_Function (ndis) 、NdisAllocateNetBufferPool (ndis) 、NdisAllocateNetBufferPool_InitFail (ndis)

另请参阅

NET_BUFFER

NET_BUFFER_LIST

NdisAllocateNetBuffer

NdisAllocateNetBufferMdlAndData

NdisFreeNetBuffer

NdisFreeNetBufferPool