Поделиться через


Функция 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. Задайте элемент типа структуры, заголовка, указывает 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 возвращает дескриптор пулу структур 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 структурой, которую вызывающий объект выделяет из пула. Необходимо вызвать функцию NdisAllocateNetBufferMdlAndData, чтобы выделить NET_BUFFER структуры из такого пула.

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается в 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