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


Функция NdisAllocateBufferPool (ndis.h)

Примечание NDIS 5. X является нерекомендуемым и заменен NDIS 6. x. Сведения о разработке новых драйверов NDIS см. в статье Сетевые драйверы, начиная с Windows Vista. Сведения о переносе NDIS 5. x драйверы для NDIS 6. x, см. раздел Перенос драйверов NDIS 5.x в NDIS 6.0.

Эта функция возвращает дескриптор, с помощью которого вызывающий объект может выделять дескрипторы буфера, вызывая функцию NdisAllocateBuffer .

Синтаксис

void NdisAllocateBufferPool(
  [out] PNDIS_STATUS Status,
  [out] PNDIS_HANDLE PoolHandle,
  [in]  UINT         NumberOfDescriptors
);

Параметры

[out] Status

Указатель на переменную, предоставленную вызывающим объектом, в которой эта функция возвращает окончательное состояние выделения буферного пула.

[out] PoolHandle

Указатель на переменную, предоставленную вызывающим объектом, в которой эта функция возвращает дескриптор буферного пула. Этот дескриптор является обязательным параметром для функций буфера NDIS, которые драйвер вызывает впоследствии.

[in] NumberOfDescriptors

Указывает количество дескрипторов буфера, которое вызывающий объект ожидает выделить из буферного пула, не освобождая выделенные дескрипторы буфера обратно в пул.

Возвращаемое значение

None

Remarks

Всегда возвращает NDIS_STATUS_SUCCESS.

После возврата этой функции драйвер вызывает функцию NdisAllocateBuffer один или несколько раз, чтобы выделить необходимые дескрипторы буфера. Драйвер должен вызывать эту функцию во время инициализации.

Параметр NumberOfDescriptors , заданный драйвером сетевого адаптера, обычно зависит от функций сетевой карты. Например, драйвер шины, master сетевой адаптер DMA с кольцевыми буферами, будет указывать по крайней мере достаточно большой numberOfDescriptors для сопоставления полного кольца.

NumberOfDescriptors, указанный в вызове этой функции, является эффективным ограничением на количество вызовов драйвера NdisAllocateBuffer, прежде чем он должен вызвать функцию NdisFreeBuffer, чтобы вернуть дескриптор буфера в список свободных буферов для буферного пула.

Если драйверу больше не нужен выделенный буферный пул, он вызывает функцию NdisFreeBufferPool , чтобы освободить дескриптор буферного пула.

Драйвер должен освободить все блокировки спина, которые он удерживает, прежде чем вызывать эту функцию.

Все драйверы NDIS более низкого уровня должны выделять все дескрипторы буфера, которые они приковывают к пакетам из буферного пула. Только драйверы протокола самого высокого уровня могут быть предоставлены дескрипторы, зависящие от ОС, которые сопоставляют диапазоны виртуальной памяти. Если эти дескрипторы памяти эквивалентны дескрипторам буфера NDIS, протокол верхнего уровня может передавать такие дескрипторы в качестве параметров в функции NDIS.

Версии ОС: Windows CE .NET 4.0 и более поздних версий.

Требования

Требование Значение
Заголовок ndis.h
IRQL IRQL <= DISPATCH_LEVEL

См. также раздел