Функция 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 |