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


Функция FwpsAllocateDeepCloneNetBufferList0 (fwpsk.h)

Функция FwpsAllocateDeepCloneNetBufferList0 выделяет NET_BUFFER_LIST структуру, которая является глубоким клоном существующей структуры NET_BUFFER_LIST .

Синтаксис

NTSTATUS FwpsAllocateDeepCloneNetBufferList0(
  [in, out]      NET_BUFFER_LIST *originalNetBufferList,
  [in, optional] NDIS_HANDLE     netBufferListPoolHandle,
  [in, optional] NDIS_HANDLE     netBufferPoolHandle,
  [out]          NET_BUFFER_LIST **netBufferList
);

Параметры

[in, out] originalNetBufferList

Указатель на исходную NET_BUFFER_LIST структуру, которая клонируется.

[in, optional] netBufferListPoolHandle

Дескриптор пула NET_BUFFER_LIST , полученный при предыдущем вызове функции NdisAllocateNetBufferListPool . Этот параметр является необязательным и может иметь значение NULL.

[in, optional] netBufferPoolHandle

Дескриптор пула NET_BUFFER_LIST , полученный при предыдущем вызове функции NdisAllocateNetBufferPool . Этот параметр является необязательным и может иметь значение NULL.

[out] netBufferList

Указатель на переменную, получающую указатель на структуру глубокого клона NET_BUFFER_LIST .

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

Функция FwpsAllocateDeepCloneNetBufferList0 возвращает один из следующих кодов NTSTATUS.

Код возврата Описание
STATUS_SUCCESS Структура глубокого клонирования NET_BUFFER_LIST успешно выделена.
Другие коды состояния Произошла ошибка.

Комментарии

Драйвер выноски вызывает функцию FwpsAllocateDeepCloneNetBufferList0 для выделения структуры глубокого клонирования NET_BUFFER_LIST существующей структуры NET_BUFFER_LIST .

Эта функция является оболочкой для функции NdisAllocateCloneNetBufferList , но она специализирована для использования функциями внедрения пакетов МПП.

Если структура глубокого клонирования NET_BUFFER_LIST должна иметь атрибуты, связанные с определенным пулом, драйвер выноски должен указать дескриптор пула в параметре NetBufferListPoolHandle или NetBufferPoolHandle . Если эти параметры имеют значение NULL, используется пул по умолчанию, предварительно выделенный NDIS.

Структура глубокого клонирования NET_BUFFER_LIST описывает те же данные, что и исходная структура NET_BUFFER_LIST . Функция FwpsAllocateDeepCloneNetBufferList0 копирует данные, описанные в исходных многомерных списках, в новые буферы данных. Структура клонирования NET_BUFFER_LIST включает начальную структуру NET_BUFFER_LIST_CONTEXT .

Эта функция задает элемент ParentNetBufferList созданной структуры NET_BUFFER_LIST клона, чтобы он указывал на родительскую структуру NET_BUFFER_LIST . Член ChildRefCount родительской структуры увеличивается на 1.

Драйвер выноски может изменить структуру клона NET_BUFFER_LIST и внедрить ее в сетевой стек вместо исходной структуры NET_BUFFER_LIST путем вызова функций внедрения пакетов. После успешного внедрения данных, описанных структурой NET_BUFFER_LIST клона в сетевой стек, драйвер выноски освобождает структуру NET_BUFFER_LIST клона, вызывая функцию FwpsFreeCloneNetBufferList0 .

Драйвер выноски может вставлять или заменять отдельные чистые буферы (NET_BUFFER) или многомерные библиотеки в NET_BUFFER_LIST глубокого клонирования. Драйвер должен отменить эти изменения, прежде чем вызывать функцию FwpsFreeCloneNetBufferList0 .

Рекомендации по управлению клонированные пакеты

Драйвер выноски не должен хранить клонированные пакеты на неопределенный срок. Клонированные пакеты могут помешать операциям управления питанием на неактивном компьютере.

Назначение глубоко клонированных пакетов в МПП заключается в том, чтобы получить пояснения от приложения пользовательского режима или другой относительно быстрой операции, которая нуждается в пакете, независимо от исходного. Драйвер выноски не должен содержать клонированные пакеты во время ожидания ввода данных пользователем, разрешения веб-службы или любой другой операции, которая может занять произвольное время.

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

Требования

Требование Значение
Минимальная версия клиента Сборка WIP 25324
Целевая платформа Универсальное
Верхняя часть fwpsk.h (включая Fwpsk.h)
Библиотека Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

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

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

Функции внедрения пакетов