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


Функция NdisAllocateFragmentNetBufferList (ndis/nblapi.h)

Вызовите функцию NdisAllocateFragmentNetBufferList , чтобы создать новую фрагментированную структуру NET_BUFFER_LIST на основе данных в существующей структуре NET_BUFFER_LIST.

Синтаксис

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

Параметры

[in] OriginalNetBufferList

Указатель на существующую структуру NET_BUFFER_LIST.

NetBufferListPool

Дескриптор, полученный при вызовеФункция NdisAllocateNetBufferListPool.

NetBufferPool

Дескриптор пула структуры NET_BUFFER, который ранее был возвращен при вызове NdisAllocateNetBufferPool.

[in] StartOffset

Дополнительное смещение в байтах от начала данных в каждой NET_BUFFER структуре. Это смещение является дополнением к значению элемента DataOffset , указанному в каждой NET_BUFFER структуре.

[in] MaximumLength

Максимальная длина (в байтах) для каждого фрагмента в новой структуре NET_BUFFER_LIST. Каждый фрагмент описывается NET_BUFFER структурой.

[in] DataOffsetDelta

Дополнительный объем используемого пространства данных , который NDIS должен сделать доступным в новых структурах NET_BUFFER.

[in] DataBackFill

Объем пространства данных в дополнение к значению параметра DataOffsetDelta , выделяемого при необходимости выделения. Если NDIS необходимо выделить память для предоставления пространства данных, запрошенного в DataOffsetDelta, он также должен выделить дополнительное пространство, указанное DataBackFill .

[in] AllocateFragmentFlags

Флаги NDIS, которые можно объединить с операцией OR. Задайте для этого параметра нулевое значение. В настоящее время для этой функции не определены флаги.

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

NdisAllocateFragmentNetBufferList возвращает указатель на новую фрагментированную NET_BUFFER_LIST структуру. Если выделение завершилось сбоем, возвращаемое значение равно NULL.

Комментарии

NdisAllocateFragmentNetBufferList выделяет и инициализирует новый фрагмент NET_BUFFER_LIST структуры и структуры NET_BUFFER , описывающие те же данные, которые описываются структурой NET_BUFFER_LIST, переданной вызывающим элементом в NdisAllocateFragmentNetBufferList.

Если структура фрагмента NET_BUFFER_LIST должна иметь атрибуты, связанные с заданным пулом, вызывающий объект должен указать дескриптор пула в параметре NetBufferListPoolHandle или NetBufferPoolHandle . Например, элемент ProtocolType структуры NET_BUFFER_LIST связан с пулом.

Для каждой структуры NET_BUFFER в указанной исходной NET_BUFFER_LIST структуре NDIS создает фрагмент NET_BUFFER структуры следующим образом:

  • NDIS создает фрагменты, начиная с начала используемого пространства данных в исходном NET_BUFFER структуру и смещение на значение, указанное в параметре StartOffset .
  • NDIS разделяет используемое пространство данных (после учета StartOffset ) в исходной структуре NET_BUFFER на фрагменты.
  • Длина используемого пространства данных каждого фрагмента меньше или равна значению, указанному в параметре MaximumLength . Используемое пространство данных последнего фрагмента может быть меньше, чем MaximumLength.
  • Каждый фрагмент описывается новой структурой NET_BUFFER и новым набором цепочек MDL.
  • Смещение данных новых структур NET_BUFFER удаляется (значение элемента DataOffset уменьшается) на количество байтов, указанное в параметре DataOffsetDelta .
  • Если NDIS необходимо выделить память для предоставления пространства данных, запрошенного в DataOffsetDelta, он также должен выделить дополнительное пространство, указанное DataBackFill .
Новая структура фрагмента NET_BUFFER_LIST, созданная NdisAllocateFragmentNetBufferList , не включает начальную структуру. структура NET_BUFFER_LIST_CONTEXT .

ВызовитеФункция NdisFreeFragmentNetBufferList для освобождения структуры NET_BUFFER_LIST и всех связанных NET_BUFFER структур и цепочек MDL, которые ранее были выделены путем вызова NdisAllocateFragmentNetBufferList.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в NDIS 6.0 и более поздних версиях.
Целевая платформа Универсальное
Верхняя часть ndis/nblapi.h (включая ndis.h)
Библиотека Ndis.lib
IRQL <= DISPATCH_LEVEL
Правила соответствия DDI Irql_NetBuffer_Function(ndis), NdisAllocateFragmentNetBufferList(ndis), NdisAllocateFragmentNetBufferList_InitFail(ndis)

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

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList