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


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