Функция 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 .
ВызовитеФункция 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) |