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

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

ПримечаниеFwpsInjectMacSendAsync 0 — это определенная версия 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 с флагами параметром FWPS_INJECTION_TYPE_L2.

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

[in, optional] injectionContext

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

[in] flags

Скрытный. Должно быть задано равно нулю.

[in] layerId

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

[in] interfaceIndex

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

[in] NdisPortNumber

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

[in, out] netBufferLists

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

[in] completionFn

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

[in, optional] completionContext

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

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

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

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

Замечания

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.
целевая платформа Всеобщий
заголовка fwpsk.h (include Fwpsk.h)
библиотеки Fwpkclnt.lib
IRQL <= DISPATCH_LEVEL

См. также

FwpsAllocateCloneNetBufferList0 FwpsAllocateNetBufferAndNetBufferList0 FwpsInjectionHandleCreate0

FwpsQueryPacketInjectionState0

NET_BUFFER_LIST

классифицироватьFn

завершенияFn