Поделиться через


структура FWPS_INCOMING_METADATA_VALUES0 (fwpsk.h)

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

Заметка

FWPS_INCOMING_METADATA_VALUES0 — это определенная версия FWPS_INCOMING_METADATA_VALUES. Дополнительные сведения см. в статье МПП Version-Independent имен и целевых версий Windows.

Синтаксис

typedef struct FWPS_INCOMING_METADATA_VALUES0_ {
  UINT32                          currentMetadataValues;
  UINT32                          flags;
  UINT64                          reserved;
  FWPS_DISCARD_METADATA0          discardMetadata;
  UINT64                          flowHandle;
  UINT32                          ipHeaderSize;
  UINT32                          transportHeaderSize;
  FWP_BYTE_BLOB                   *processPath;
  UINT64                          token;
  UINT64                          processId;
  UINT32                          sourceInterfaceIndex;
  UINT32                          destinationInterfaceIndex;
  ULONG                           compartmentId;
  FWPS_INBOUND_FRAGMENT_METADATA0 fragmentMetadata;
  ULONG                           pathMtu;
  HANDLE                          completionHandle;
  UINT64                          transportEndpointHandle;
  SCOPE_ID                        remoteScopeId;
  WSACMSGHDR                      *controlData;
  ULONG                           controlDataLength;
  FWP_DIRECTION                   packetDirection;
  PVOID                           headerIncludeHeader;
  ULONG                           headerIncludeHeaderLength;
  IP_ADDRESS_PREFIX               destinationPrefix;
  UINT16                          frameLength;
  UINT64                          parentEndpointHandle;
  UINT32                          icmpIdAndSequence;
  DWORD                           localRedirectTargetPID;
  SOCKADDR                        *originalDestination;
  HANDLE                          redirectRecords;
  UINT32                          currentL2MetadataValues;
  UINT32                          l2Flags;
  UINT32                          ethernetMacHeaderSize;
  UINT32                          wiFiOperationMode;
  NDIS_SWITCH_PORT_ID             vSwitchSourcePortId;
  NDIS_SWITCH_NIC_INDEX           vSwitchSourceNicIndex;
  NDIS_SWITCH_PORT_ID             vSwitchDestinationPortId;
  UINT32                          padding0;
  USHORT                          padding1;
  UINT32                          padding2;
  HANDLE                          vSwitchPacketContext;
  PVOID                           subProcessTag;
  UINT64                          reserved1;
} FWPS_INCOMING_METADATA_VALUES0;

Члены

currentMetadataValues

Значение UINT32, содержащее побитовую или комбинацию идентификаторов полей метаданных ,, указывающее, какие значения метаданных задаются в структуре.

flags

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

reserved

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

discardMetadata

Структура FWPS_DISCARD_METADATA0, описывающая причину отмены данных. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_DISCARD_REASON задан в элементе currentMetadataValues.

flowHandle

Дескриптор потока данных. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_FLOW_HANDLE задан в элементе currentMetadataValues.

ipHeaderSize

Смещение в байтах заголовка IP.

В входящих путях ipHeaderSizeпри использовании в сочетании с элементом transportHeaderSize указывает количество байтов, отступ от расположения смещения данных к началу заголовка IP.

На следующих уровнях ошибок ICMP входящего трафика ipHeaderSize указывает общее количество байтов, отступ от смещения данных к началу заголовка IP:

FWPS_LAYER_INBOUND_ICMP_ERROR_V4

FWPS_LAYER_INBOUND_ICMP_ERROR_V6

FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD

FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

В исходящих путях, если ipHeaderSize больше нуля, он указывает количество байтов для перехода от расположения смещения данных до конца заголовка IP.

Этот элемент не применим к исходящему пути на следующих уровнях:

FWPS_LAYER_DATAGRAM_DATA_V4

FWPS_LAYER_DATAGRAM_DATA_V6

FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_IP_HEADER_SIZE задан в элементе currentMetadataValues.

transportHeaderSize

Смещение или размер в байтах заголовка транспорта.

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

На следующих уровнях ошибок ICMP входящего трафика transportHeaderSize указывает размер заголовка ICMP:

  • FWPS_LAYER_INBOUND_ICMP_ERROR_V4
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V6
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V4_DISCARD
  • FWPS_LAYER_INBOUND_ICMP_ERROR_V6_DISCARD

В исходящих путях transportHeaderSize указывает количество байтов, которые необходимо перейти от расположения смещения данных к концу заголовка транспорта.

Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_TRANSPORT_HEADER_SIZE задан в элементе currentMetadataValues.

processPath

Указатель на структуру FWP_BYTE_BLOB, содержащую полный путь к процессу, которому принадлежит конечная точка. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_PROCESS_PATH задан в элементе currentMetadataValues.

token

Дескриптор маркера, используемый для проверки разрешений для пользователя. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_TOKEN задан в элементе currentMetadataValues.

processId

Идентификатор процесса для процесса, которому принадлежит конечная точка. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_PROCESS_ID задан в элементе currentMetadataValues.

sourceInterfaceIndex

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

destinationInterfaceIndex

Индекс сетевого интерфейса, в котором отправляется исходящий пакет. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_DESTINATION_INTERFACE_INDEX задан в элементе currentMetadataValues.

compartmentId

Идентификатор отсека маршрутизации, в котором был получен или отправлен пакет. Все измененные пакеты следует внедрить обратно в тот же отсек маршрутизации, который указан для исходного пакета. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_COMPARTMENT_ID задан в элементе currentMetadataValues.

fragmentMetadata

Структура FWPS_INBOUND_FRAGMENT_METADATA0, описывающая данные фрагмента для полученного фрагмента пакета. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_FRAGMENT_DATA задан в элементе currentMetadataValues.

pathMtu

Максимальная единица передачи пути (MTU пути) для исходящего пакета. Это значение указывает наибольший размер физического пакета в байтах, который может передавать сеть без фрагментации, этот элемент содержит допустимые данные только в том случае, если флаг FWPS_METADATA_FIELD_PATH_MTU установлен в элементе currentMetadataValues.

completionHandle

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

transportEndpointHandle

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

remoteScopeId

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

controlData

Необязательный объект управления данными сокета. Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_TRANSPORT_CONTROL_DATA задан в элементе currentMetadataValues. Сведения о типе WSACMSGHDR см. в CMSGHDR.

controlDataLength

Длина элемента controlData в байтах.

packetDirection

Направление сетевого трафика (входящего или исходящего трафика), указанное одним из константных значений FWP_DIRECTION. Этот элемент устанавливается на уровне приложений для подключения или приема или приема слоев во время операции классификации повторной проверки подлинности. Дополнительные сведения см. в разделе "Примечания".

Заметка

Этот элемент содержит допустимые данные, только если флаг FWPS_METADATA_FIELD_PACKET_DIRECTION задан в элементе currentMetadataValues.

headerIncludeHeader

Указатель на заголовок IP, если пакет отправляется из необработанного сокета.

headerIncludeHeaderLength

Длина в байтах заголовка IP, на который указывает заголовок headerIncludeHeader.

destinationPrefix

Префикс назначения.

frameLength

Длина кадра.

parentEndpointHandle

Дескриптор родительской конечной точки.

icmpIdAndSequence

Идентификатор и последовательность ICMP.

localRedirectTargetPID

Идентификатор идентификатора процесса, ответственного за перенаправленное подключение.

originalDestination

Исходное назначение перенаправленного подключения.

redirectRecords

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

currentL2MetadataValues

Битовая маска, содержащая флаги, указывающие, какие значения уровня 2 задаются. Одно или несколько значений можно объединить с побитовой ИЛИ.

Ценность Значение
FWPS_L2_METADATA_FIELD_ETHERNET_MAC_HEADER_SIZE Значение элемента ethernetMacHeaderSize указывает размер заголовка MAC.
FWPS_L2_METADATA_FIELD_WIFI_OPERATION_MODE Значение элемента wiFiOperationMode указывает текущий режим работы Native 802.11.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_PORT_ID Значение элемента vSwitchSourcePortId указывает идентификатор исходного порта на виртуальном коммутаторе.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_NIC_INDEX Значение элемента vSwitchSourceNicIndex указывает индекс исходного сетевого адаптера на виртуальном коммутаторе.
FWPS_L2_METADATA_FIELD_VSWITCH_PACKET_CONTEXT Значение элемента vSwitchPacketContext указывает HANDLE в контексте пакета виртуального коммутатора.
FWPS_L2_METADATA_FIELD_VSWITCH_DESTINATION_PORT_ID Значение элемента vSwitchDestinationPortId указывает идентификатор конечного порта на виртуальном коммутаторе.

l2Flags

Битовая маска, содержащая флаги уровня 2, которые можно объединить с битовой или.

Ценность Значение
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV4_FRAMING Указывает необработанные обрамления IP4.
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV6_FRAMING Указывает необработанные обрамления IP6.
FWPS_L2_INCOMING_FLAG_RECLASSIFY_MULTI_DESTINATION Этот флаг указывает, что NBL, который был замечен один раз при входе, был распределен по нескольким NBLs, каждый из которых предназначен для другой виртуальной машины, и первый NBL этого дистрибутива уже был указан вашему драйверу выноски.

Первый NBL распределенной группы не будет иметь этот флаг. Все последующие NBL для группы будут иметь этот флаг.

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

Для всех последующих указаний следует блокировать и поглощать исходный пакет и очищать флаг FWPS_RIGHT_ACTION_WRITE для клона. Когда внедренный клон выходит из входящего трафика, он будет повторно распространяться, и все признаки будут иметь состояние внедрения FWPS_PACKET_INJECTED_BY_SELF или FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

ethernetMacHeaderSize

Размер в байтах заголовка MAC, если установлен флаг FWPS_L2_METADATA_FIELD_802_3_MAC_HEADER_SIZE. Этот флаг установлен только для входящего слоя 802.3.

wiFiOperationMode

Текущий режим работы Native 802.11, если установлен флаг FWPS_L2_METADATA_FIELD_802_11_OPERATION_MODE. Дополнительные сведения см. в DOT11_CURRENT_OPERATION_MODE.

vSwitchSourcePortId

Уникальный идентификатор исходного порта на виртуальном коммутаторе.

vSwitchSourceNicIndex

Индекс исходного сетевого адаптера на виртуальном коммутаторе.

vSwitchDestinationPortId

Уникальный идентификатор конечного порта на виртуальном коммутаторе.

padding0

Скрытный.

padding1

Скрытный.

padding2

Скрытный.

vSwitchPacketContext

Дескриптор контекста пакета виртуального коммутатора.

subProcessTag

Скрытный.

reserved1

Скрытный.

Замечания

Подсистема фильтрации передает указатель на структуру FWPS_INCOMING_METADATA_VALUES0 в функцию выноски классифицироватьFn. Значения метаданных, содержащиеся в структуре, не обрабатываются обработчиком фильтров, но предоставляются в функцию выноски классифицироватьFn, чтобы предоставить дополнительные сведения.

Драйвер выноски может использовать следующий макрос для проверки наличия определенного значения метаданных в структуре FWPS_INCOMING_METADATA_VALUES0:

FWPS_IS_METADATA_FIELD_PRESENT(metadataValues, metadataField)

Если значение метаданных FWPS_METADATA_FIELD_PACKET_DIRECTION присутствует в структуре FWPS_INCOMING_METADATA_VALUES0, элемент packetDirection указывает, был ли пакет входящий или исходящий во время операции классификации повторной проверки подлинности. В противном случае значение метаданных FWPS_METADATA_FIELD_PACKET_DIRECTION отсутствует.

Драйвер выноски должен следовать этим рекомендациям при проверке пакета:

  • При подключении или получении или принятии уровней ALE драйвер выноски не должен предполагать, что пакет содержит допустимый IP-заголовок, если пакету задано значение FWP_DIRECTION_OUTBOUND, а значение метаданных FWPS_METADATA_FIELD_PACKET_DIRECTION присутствует.
  • Если значение метаданных FWPS_METADATA_FIELD_PACKET_DIRECTION отсутствует, драйвер выноски должен принять направление пакета FWP_DIRECTION_OUTBOUND.
  • Если значение метаданных FWPS_METADATA_FIELD_PACKET_DIRECTION отсутствует, драйвер выноски должен предполагать направление пакета FWP_DIRECTION_INBOUND.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows Vista.
заголовка fwpsk.h (include Fwpsk.h)

См. также