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

Функция FwpsInjectMacSendAsync0 может повторно выбрать ранее поглощенный кадр управления доступом к мультимедиа (MAC) (или клон кадра) обратно в путь исходящих данных уровня 2, из которого он был перехвачен, или внедрить созданный кадр MAC.

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

 

Синтаксис

NTSTATUS FwpsInjectMacSendAsync0(
  [in]           HANDLE               injectionHandle,
  [in, optional] HANDLE               injectionContext,
  [in]           UINT32               flags,
  [in]           UINT16               layerId,
  [in]           IF_INDEX             interfaceIndex,
  [in]           NDIS_PORT_NUMBER     NdisPortNumber,
  [in, out]      NET_BUFFER_LIST      *netBufferLists,
  [in]           FWPS_INJECT_COMPLETE completionFn,
  [in, optional] HANDLE               completionContext
);

Параметры

[in] injectionHandle

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

Примечание Задайте для параметра addressFamily функции FwpsInjectionHandleCreate0 значение AF_UNSPEC.
 

[in, optional] injectionContext

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

[in] flags

Зарезервировано. Необходимо задать нулевое значение.

[in] layerId

Идентификатор времени выполнения для уровня фильтрации, на котором обрабатывается поток данных.

[in] interfaceIndex

Индекс интерфейса, который передается в входящее значение classifyFn драйвера выноски FWPS_FIELD_XxxMAC_FRAMEXxx_INTERFACE_INDEX.

[in] NdisPortNumber

Номер порта NDIS, который передается входящее значение classifyFn драйвера выноски FWPS_FIELD_XxxMAC_FRAMEXxx_NDIS_PORT.

[in, out] netBufferLists

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

[in] completionFn

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

[in, optional] completionContext

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

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

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

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

Комментарии

Драйвер обратного вызова вызывает функцию FwpsInjectMacSendAsync0 для повторного извлечения ранее поглощенного кадра MAC (или клона кадра) обратно в путь к входящим данным уровня 2, из которого он был перехвачен, или для внедрения созданного кадра MAC.

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

Внедренные кадры могут снова классифицироваться, если пакеты соответствуют тому же фильтру, что и первоначально классифицированные. Поэтому, как и в случае с выносками на уровнях IP, выноски уровня 2 также должны защищаться от бесконечной проверки пакетов путем вызова FwpsQueryPacketInjectionState0.

Требования

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

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

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsInjectionHandleCreate0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

classifyFn

completionFn