Функция NdisAllocateNetBuffer (ndis/nblapi.h)
Вызовите функцию NdisAllocateNetBuffer , чтобы выделить и инициализировать структуру NET_BUFFER из пула NET_BUFFER структур.
Синтаксис
NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
[in] NDIS_HANDLE PoolHandle,
[in, optional] MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
Параметры
[in] PoolHandle
Дескриптор пула NET_BUFFER структуры, который ранее был возвращен при вызове NdisAllocateNetBufferPool.
[in, optional] MdlChain
Указатель на цепочку MDL, которую NDIS использует для инициализации новой структуры NET_BUFFER . MdlChain может иметь значение NULL.
[in] DataOffset
Начальное смещение (в байтах) от начала буфера до начала используемого пространства данных в цепочке MDL. Пространство данных перед этим смещением — это неиспользуемое пространство данных. Таким образом, это значение также представляет начальный объем доступного пространства обратного заполнения в цепочке MDL. Если MdlChain имеет значение NULL, dataOffset должен иметь значение 0.
[in] DataLength
Длина используемого пространства данных в байтах в цепочке MDL. Если MdlChain имеет значение NULL, DataLength должно иметь значение 0.
Возвращаемое значение
NdisAllocateNetBuffer возвращает указатель на структуру NET_BUFFER , выделенную NDIS. Если выделение не удалось, этот указатель имеет значение NULL.
Комментарии
Вызовите NdisFreeNetBuffer , чтобы освободить NET_BUFFER структуру, выделенную из пула NET_BUFFER структуры.
Например, если исходная цепочка MDL содержит XDataLength и YDataOffset, а CurrentMdl начинается со второго MDL (M) в исходной цепочке MDL, CurrentMdlOffset имеет значение Z. Поле MdlChain в NET_BUFFER_DATA затем должно указать на новую цепочку MDL, содержащую X'DataLength и Y'DataOffset. Если CurrentMdl начинается с третьего MDL (M') в новой цепочке MDL, CurrentMdlOffset имеет значение Z', и для задания полей в NET_BUFFER необходимо использовать следующие макросы:
NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Поддерживается в NDIS 6.0 и более поздних версиях. |
Целевая платформа | Универсальное |
Верхняя часть | ndis/nblapi.h (включая ndis.h) |
Библиотека | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
Правила соответствия DDI | Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis) |