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

Функция FwpsInjectNetworkReceiveAsync0 внедряет данные пакетов в путь получения данных.

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

Синтаксис

NTSTATUS FwpsInjectNetworkReceiveAsync0(
  [in]           HANDLE                injectionHandle,
  [in, optional] HANDLE                injectionContext,
  [in]           UINT32                flags,
  [in]           COMPARTMENT_ID        compartmentId,
  [in]           IF_INDEX              interfaceIndex,
  [in]           IF_INDEX              subInterfaceIndex,
  [in, out]      NET_BUFFER_LIST       *netBufferList,
  [in]           FWPS_INJECT_COMPLETE0 completionFn,
  [in, optional] HANDLE                completionContext
);

Параметры

[in] injectionHandle

Дескриптор внедрения, созданный ранее при вызове функции FwpsInjectionHandleCreate0 с параметром flags , равным FWPS_INJECTION_TYPE_NETWORK.

[in, optional] injectionContext

Необязательный дескриптор контекста внедрения. Если он указан, его можно получить, вызвав функцию FwpsQueryPacketInjectionState0 , когда состояние внедрения пакета FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF или FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

[in] flags

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

[in] compartmentId

Идентификатор секции маршрутизации, в которую внедряются данные пакета, задается как тип COMPARTMENT_ID . Этот идентификатор предоставляется выноске через член compartmentId элемента FWPS_INCOMING_METADATA_VALUES0 структуры, передаваемой функции выноски classifyFn драйвера выноски. Если член compartmentId доступен для выносок, FWPS_METADATA_FIELD_COMPARTMENT_ID будет задан в элементе currentMetadataValues . В противном случае задайте для этого параметра значение UNSPECIFIED_COMPARTMENT_ID.

[in] interfaceIndex

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

[in] subInterfaceIndex

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

[in, out] netBufferList

Указатель на структуру NET_BUFFER_LIST , описывающую внедряемые данные пакетов. Драйвер выноски выделяет структуру NET_BUFFER_LIST, используемую для внедрения данных пакетов, вызывая либо Функция FwpsAllocateCloneNetBufferList0 или Функция FwpsAllocateNetBufferAndNetBufferList0 . Структура NET_BUFFER_LIST должна начинаться с ip-заголовка.

[in] completionFn

Указатель на функцию выноски завершенияFn , предоставляемую драйвером выноски. Модуль фильтров вызывает эту функцию после внедрения в сетевой стек данных пакетов, описанных параметром netBufferList .

[in, optional] completionContext

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

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

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

Код возврата Описание
STATUS_SUCCESS
Внедрение данных пакета было успешно инициировано. Модуль фильтрации вызовет функцию завершения после того, как подсистема фильтров завершит внедрение данных пакетов в сетевой стек или при последующей ошибке. В случае ошибки элемент Status завершенной структуры NET_BUFFER_LIST указывает причину сбоя.
STATUS_FWP_TCPIP_NOT_READY
Сетевой стек TCP/IP не готов принять внедрение данных пакетов.
STATUS_FWP_INJECT_HANDLE_CLOSING
Маркер внедрения закрывается.
STATUS_FWP_INJECT_HANDLE_STALE
Дескриптор внедрения не был создан с параметром flagsДля функции FwpsInjectionHandleCreate0 задано значение FWPS_INJECTION_TYPE_NETWORK.
Другие коды состояния
Произошла ошибка.

Комментарии

Драйвер выноски вызывает функцию FwpsInjectNetworkReceiveAsync0 для внедрения данных пакета или фрагмента пакета в путь получения данных. Эта функция может выполняться асинхронно. Драйверы выносок обычно внедряют данные в сетевой стек при изменении данных пакетов. Дополнительные сведения о том, как драйвер выноски может изменять пакетные данные, см. в разделе Операции с драйвером выносок.

Если возвращаемое значение не STATUS_SUCCESS, функция завершения вызываться не будет. В этом случае список чистых буферов, на который указывает netBufferList , должен быть освобожден вызовом FwpsFreeNetBufferList0 или FwpsFreeCloneNetBufferList0.

Внедренный пакет можно снова указать драйверу выноски. Чтобы предотвратить бесконечный цикл, драйвер должен сначала вызватьФункция FwpsQueryPacketInjectionState0, прежде чем продолжить вызов функции выноски classifyFn, и драйвер должен разрешить неизмененные пакеты с состоянием внедрения FWPS_PACKET_INJECTION_STATEFWPS_PACKET_INJECTED_BY_SELF илиFWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

Требования

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

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

FWPS_INCOMING_METADATA_VALUES0

FWPS_PACKET_INJECTION_STATE

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0

FwpsFreeCloneNetBufferList0

FwpsFreeNetBufferList0

FwpsInjectionHandleCreate0

FwpsInjectionHandleDeкистрация0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn