Функция FwpsInjectMacSendAsync0 (fwpsk.h)
Функция FwpsInjectMacSendAsync0 может повторно выбрать ранее поглощенный кадр управления доступом к мультимедиа (MAC) (или клон кадра) обратно в путь исходящих данных уровня 2, из которого он был перехвачен, или внедрить созданный кадр MAC.
Синтаксис
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.
[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.
Код возврата | Описание |
---|---|
|
Внедрение данных кадра MAC было успешно инициировано. Модуль фильтрации вызывает функцию завершения после завершения модуля фильтрации при внедрении данных кадра MAC или при последующей ошибке. В случае ошибки элемент Status завершенной структуры NET_BUFFER_LIST указывает причину сбоя. |
|
Уровень MAC не готов к приему внедрения данных пакетов. |
|
Маркер внедрения закрывается. |
|
Дескриптор внедрения не был создан с параметром 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 |