структура 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) |