Функция 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 (include ndis.h) |
библиотеки | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
правил соответствия DDI | Irql_NetBuffer_Function(ndis), NdisAllocateFragmentNetBufferList(ndis), NdisAllocateFragmentNetBufferList_InitFail(ndis) |