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

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

ПримечаниеFwpsAllocateCloneNetBufferList0 — это определенная версия FwpsAllocateCloneNetBufferList. Дополнительные сведения см. в разделах Имена Version-Independent и Выбор конкретных версий Windows .
 

Синтаксис

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

Параметры

[in, out] originalNetBufferList

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

[in, optional] netBufferListPoolHandle

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

[in, optional] netBufferPoolHandle

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

[in] allocateCloneFlags

В настоящее время для этой функции не определены флаги. Драйверы выносок должны задать для этого параметра нулевое значение.

[out] netBufferList

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

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

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

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

Комментарии

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

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

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

Структура клонирования NET_BUFFER_LIST описывает те же данные, что и исходная структура NET_BUFFER_LIST. Функция FwpsAllocateCloneNetBufferList0 не копирует данные, описанные в исходных многомерных списках, в новые буферы данных. Вместо этого структура клона NET_BUFFER_LIST ссылается на исходные буферы данных. Структура 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) или многомерные библиотеки в списке клоновых чистых буферов. Такой драйвер также должен отменить изменения перед вызовом Функция FwpsFreeCloneNetBufferList0 .

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

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

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

Если драйвер выноски должен ждать потенциально длительной операции, он создает глубокую копию пакета с помощью FwpsAllocateNetBufferAndNetBufferList0, и он блокирует и поглощает исходный пакет.

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

Требования

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

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

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

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