Функция 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;

Эта структура включает следующие элементы:

Структура NDIS_OBJECT_HEADER для структуры NET_BUFFER_POOL_PARAMETERS. Задайте для элемента 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 возвращает дескриптор в пул структуры NET_BUFFER, выделенный NDIS. Если выделение не удалось, этот дескриптор имеет значение NULL. Этот дескриптор является обязательным параметром в последующих вызовах функций NDIS, которые выделяют и освобождают структуры NET_BUFFER из этого пула.

Комментарии

Вызовите следующие функции для выделения NET_BUFFER структур из пула NET_BUFFER структур.

NdisAllocateNetBuffer

NdisAllocateNetBufferMdlAndData
Обратите вниманиеNET_BUFFER и NET_BUFFER_LIST структуры должны быть выделены из буферного пула NDIS. Драйвер не должен выделять и инициализировать структуру NET_BUFFER или NET_BUFFER_LIST из частного пула памяти или стека.
 
Вы можете вызвать NdisAllocateNetBufferPool и задать значение DataSize при создании пула NET_BUFFER структуры. В этом случае MDL и данные предварительно выделяются с каждой NET_BUFFER структурой, которую вызывающий объект выделяет из пула. Чтобы выделить NET_BUFFER структуры из такого пула, необходимо вызвать функцию NdisAllocateNetBufferMdlAndData .

MDL и буферы данных, выделенные с помощью NdisAllocateNetBufferMdlAndData , не должны освобождаться отдельно от структуры NET_BUFFER. Такие структуры освобождаются с помощью структуры NET_BUFFER при вызове функции NdisFreeNetBuffer .

Вызовите функцию NdisFreeNetBufferPool , чтобы освободить пулы структуры NET_BUFFER, созданные с помощью NdisAllocateNetBufferPool.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Универсальное
Верхняя часть ndis/nblapi.h (включая 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