Функция FwpsInjectMacReceiveAsync0 (fwpsk.h)
Функция FwpsInjectMacReceiveAsync0 может повторно выбрать ранее поглощаемый кадр управления доступом к мультимедиа (MAC) (или клон кадра) обратно в путь входящих данных уровня 2, из которого он был перехвачен, или внедрить созданный кадр MAC.
Синтаксис
NTSTATUS FwpsInjectMacReceiveAsync0(
[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.
[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 .
При (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_ETHERNET)
значении NET_BUFFER_LIST должен начинаться с заголовка Ethernet.
При (layerId == FWPS_LAYER_INBOUND_MAC_FRAME_NATIVE)
значении NET_BUFFER_LIST должна начинаться с заголовка MAC.
[in] completionFn
Указатель на функцию выноски завершенияFn , предоставляемую драйвером выноски. Модуль фильтров вызывает эту функцию после внедрения в сетевой стек данных пакетов, описанных параметром netBufferLists . Этот указатель необходимо указывать при внедрении клонированных или созданных NET_BUFFER_LIST структур. При внедрении исходных структур NET_BUFFER_LIST этот параметр может иметь значение NULL, если исходные структуры не изменяются.
[in, optional] completionContext
Указатель на предоставленный драйвером выноски контекст, который передается в функцию выноски, на которую указывает параметр completionFn . Этот параметр является необязательным и может иметь значение NULL.
Возвращаемое значение
Функция FwpsInjectMacReceiveAsync0 возвращает один из следующих кодов NTSTATUS.
Код возврата | Описание |
---|---|
|
Внедрение данных кадра MAC было успешно инициировано. Подсистема фильтрации вызывает функцию завершения после завершения подсистемы фильтрации при внедрении данных кадра MAC или при последующей ошибке. В случае ошибки элемент Status завершенной структуры NET_BUFFER_LIST указывает причину сбоя. |
|
Уровень MAC не готов принять внедрение пакетных данных. |
|
Маркер внедрения закрывается. |
|
Дескриптор внедрения не был создан с параметром flagsДля функции FwpsInjectionHandleCreate0 задано значение FWPS_INJECTION_TYPE_L2. |
|
Произошла ошибка. |
Комментарии
Драйвер обратного вызова вызывает функцию FwpsInjectMacReceiveAsync0 для повторного ввода ранее поглощаемого кадра MAC (или клона кадра) обратно в путь входящих данных уровня 2, из которого он был перехвачен, или для внедрения созданного кадра MAC.
Параметр netBufferLists может быть NET_BUFFER_LIST цепочкой. Однако функция завершения может вызываться несколько раз каждый, завершая сегмент (или один NET_BUFFER_LIST) цепочки.
Внедренные кадры могут быть классифицированы снова, если пакеты соответствуют тому же фильтру, что и первоначально классифицированные. Поэтому, как и в случае с выносками на уровнях IP, выноски уровня 2 также должны защищаться от бесконечной проверки пакетов путем вызова FwpsQueryPacketInjectionState0.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8. |
Целевая платформа | Универсальное |
Верхняя часть | fwpsk.h (включая Fwpsk.h) |
Библиотека | Fwpkclnt.lib |
IRQL | <= DISPATCH_LEVEL |