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

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

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

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

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

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

Требования

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

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

FwpsFreeCloneNetBufferList0

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

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