estrutura FWPS_INCOMING_METADATA_VALUES0 (fwpsk.h)

A estrutura FWPS_INCOMING_METADATA_VALUES0 define valores de metadados que o mecanismo de filtro passa para a função de texto explicativo classifyFn.

Nota

FWPS_INCOMING_METADATA_VALUES0 é uma versão específica do FWPS_INCOMING_METADATA_VALUES. Consulte nomes de Version-Independent WFP e versões específicas de destino do Windows para obter mais informações.

Sintaxe

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;

Membros

currentMetadataValues

Um valor UINT32 que contém um OR bit a bit de uma combinação de identificadores de campo de metadados que especificam quais valores de metadados são definidos na estrutura.

flags

Usado internamente pelo mecanismo de filtro. Os drivers de texto explicativo devem ignorar esse membro.

reserved

Reservado para uso do sistema. Os drivers de texto explicativo devem ignorar esse membro.

discardMetadata

Uma estrutura FWPS_DISCARD_METADATA0 que descreve o motivo pelo qual os dados foram descartados. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_DISCARD_REASON estiver definido no membro currentMetadataValues .

flowHandle

Um identificador para o fluxo de dados. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_FLOW_HANDLE estiver definido no membro currentMetadataValues.

ipHeaderSize

O deslocamento, em bytes, do cabeçalho IP.

Em caminhos de entrada, ipHeaderSize, quando usado em conjunto com o membro transportHeaderSize, especifica o número de bytes a serem retirados do local de deslocamento de dados para o início do cabeçalho IP.

Nas seguintes camadas de erro ICMP de entrada, ipHeaderSize especifica o número total de bytes a serem retirados do deslocamento de dados para o início do cabeçalho 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

Nos caminhos de saída, se ipHeaderSize for maior que zero, ele especificará o número de bytes para avançar do local de deslocamento de dados até o final do cabeçalho IP.

Esse membro não é aplicável ao caminho de saída nas seguintes camadas:

FWPS_LAYER_DATAGRAM_DATA_V4

FWPS_LAYER_DATAGRAM_DATA_V6

FWPS_LAYER_DATAGRAM_DATA_V4_DISCARD

FWPS_LAYER_DATAGRAM_DATA_V6_DISCARD

Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_IP_HEADER_SIZE estiver definido no membro currentMetadataValues.

transportHeaderSize

O deslocamento ou o tamanho, em bytes, do cabeçalho de transporte.

Em caminhos de entrada, transportHeaderSize especifica o número de bytes a serem retirados do local de deslocamento de dados até o final do cabeçalho de transporte.

Nas seguintes camadas de erro ICMP de entrada, transportHeaderSize especifica o tamanho do cabeçalho 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

Em caminhos de saída, transportHeaderSize especifica o número de bytes para avançar do local de deslocamento de dados até o final do cabeçalho de transporte.

Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_TRANSPORT_HEADER_SIZE estiver definido no membro currentMetadataValues.

processPath

Um ponteiro para uma estrutura FWP_BYTE_BLOB que contém o caminho completo para o processo que possui o ponto de extremidade. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_PROCESS_PATH estiver definido no membro currentMetadataValues.

token

Um identificador para o token usado para validar as permissões para o usuário. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_TOKEN estiver definido no membro currentMetadataValues.

processId

A ID do processo que possui o ponto de extremidade. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_PROCESS_ID estiver definido no membro currentMetadataValues.

sourceInterfaceIndex

O índice da interface de rede em que um pacote de entrada foi recebido. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_SOURCE_INTERFACE_INDEX estiver definido no membro currentMetadataValues.

destinationInterfaceIndex

O índice da interface de rede para onde um pacote de saída deve ser enviado. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_DESTINATION_INTERFACE_INDEX estiver definido no membro currentMetadataValues.

compartmentId

O identificador do compartimento de roteamento no qual o pacote foi recebido ou está sendo enviado. Todos os pacotes modificados devem ser injetados de volta no mesmo compartimento de roteamento indicado para o pacote original. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_COMPARTMENT_ID estiver definido no membro currentMetadataValues.

fragmentMetadata

Uma estrutura FWPS_INBOUND_FRAGMENT_METADATA0 que descreve os dados de fragmento de um fragmento de pacote recebido. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_FRAGMENT_DATA estiver definido no membro currentMetadataValues.

pathMtu

A unidade de transmissão máxima do caminho (MTU de caminho) para um pacote de saída. Esse valor indica o maior tamanho de pacote físico, em bytes, que uma rede pode transmitir sem fragmentação, este membro contém dados válidos somente se o sinalizador FWPS_METADATA_FIELD_PATH_MTU estiver definido no membro currentMetadataValues.

completionHandle

Um identificador de conclusão que é necessário para aguardar a operação de filtragem atual. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_COMPLETION_HANDLE estiver definido no membro currentMetadataValues.

transportEndpointHandle

Um identificador de ponto de extremidade que indica o final do pacote a ser injetado na camada de transporte de saída. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_TRANSPORT_ENDPOINT_HANDLE estiver definido no membro currentMetadataValues.

remoteScopeId

O identificador de escopo remoto a ser usado na injeção de camada de transporte de saída. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_REMOTE_SCOPE_ID estiver definido no membro currentMetadataValues.

controlData

Um objeto de dados de controle de soquete opcional. Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_TRANSPORT_CONTROL_DATA estiver definido no membro currentMetadataValues . Para obter informações sobre o tipo WSACMSGHDR, consulte CMSGHDR .

controlDataLength

O comprimento, em bytes, do membro do controlData .

packetDirection

A direção do tráfego de rede (entrada ou saída), conforme especificado por um dos valores constantes de FWP_DIRECTION. Esse membro é definido na conexão ALE (imposição da camada de aplicativo) ou camadas de recebimento/aceitação durante uma operação de classificação de reautorização. Para obter mais informações, consulte a seção Comentários.

Nota

Esse membro conterá dados válidos somente se o sinalizador de FWPS_METADATA_FIELD_PACKET_DIRECTION for definido no membro currentMetadataValues .

headerIncludeHeader

Um ponteiro para o cabeçalho IP se o pacote for enviado de um soquete bruto.

headerIncludeHeaderLength

O comprimento, em bytes, do cabeçalho IP apontado por headerIncludeHeader.

destinationPrefix

O prefixo de destino.

frameLength

O comprimento do quadro.

parentEndpointHandle

O identificador do pai do ponto de extremidade.

icmpIdAndSequence

O identificador e a sequência do ICMP.

localRedirectTargetPID

O PID do processo responsável por uma conexão redirecionada.

originalDestination

O destino original de uma conexão redirecionada.

redirectRecords

Um identificador de registros de redirecionamento que pode ser passado para a função FwpsQueryConnectionRedirectState0 para obter o estado de redirecionamento.

currentL2MetadataValues

Uma máscara de bits que contém sinalizadores que especificam quais valores de camada 2 são definidos. Um ou mais valores podem ser combinados com um OR bit a bit.

Valor Significado
FWPS_L2_METADATA_FIELD_ETHERNET_MAC_HEADER_SIZE O valor do membro ethernetMacHeaderSize indica o tamanho do cabeçalho MAC.
FWPS_L2_METADATA_FIELD_WIFI_OPERATION_MODE O valor do membro wiFiOperationMode indica o modo de operação Native 802.11 atual.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_PORT_ID O valor do membro vSwitchSourcePortId indica o identificador da porta de origem no comutador virtual.
FWPS_L2_METADATA_FIELD_VSWITCH_SOURCE_NIC_INDEX O valor do membro vSwitchSourceNicIndex indica o índice da NIC de origem no comutador virtual.
FWPS_L2_METADATA_FIELD_VSWITCH_PACKET_CONTEXT O valor do membro vSwitchPacketContext indica um HANDLE para o contexto do pacote de comutador virtual.
FWPS_L2_METADATA_FIELD_VSWITCH_DESTINATION_PORT_ID O valor do membro vSwitchDestinationPortId indica o identificador da porta de destino no comutador virtual.

l2Flags

Uma máscara de bits contendo sinalizadores de camada 2 que pode ser combinada com um OR bit a bit.

Valor Significado
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV4_FRAMING Indica o enquadramento ip4 bruto.
FWPS_L2_INCOMING_FLAG_IS_RAW_IPV6_FRAMING Indica o enquadramento ip6 bruto.
FWPS_L2_INCOMING_FLAG_RECLASSIFY_MULTI_DESTINATION Esse sinalizador indica que uma NBL que foi vista uma vez na entrada foi distribuída em várias NBLs, cada uma delas destinada a uma VM diferente, e a primeira NBL dessa distribuição já foi indicada ao driver de texto explicativo.

A primeira NBL do grupo distribuído não terá esse sinalizador definido. Todas as NBLs subsequentes para o grupo terão esse sinalizador definido.

Para fins de injeção, o driver de texto explicativo deve clonar o NBL, bloquear e absorver o pacote original e limpar o sinalizador de FWPS_RIGHT_ACTION_WRITE para a primeira indicação. Em seguida, modifique o clone e insira-o no caminho de entrada.

Para todas as indicações subsequentes, você deve bloquear e absorver o pacote original e limpar o sinalizador de FWPS_RIGHT_ACTION_WRITE para o clone. Quando o clone injetado sai da entrada, ele será redistribuído novamente e todas as indicações terão um estado de injeção de FWPS_PACKET_INJECTED_BY_SELF ou FWPS_PACKET_PREVIOUSLY_INJECTED_BY_SELF.

ethernetMacHeaderSize

O tamanho, em bytes, do cabeçalho MAC se o sinalizador FWPS_L2_METADATA_FIELD_802_3_MAC_HEADER_SIZE estiver definido. Esse sinalizador é definido apenas para a camada 802.3 de entrada.

wiFiOperationMode

O modo de operação Nativo 802.11 atual se o sinalizador de FWPS_L2_METADATA_FIELD_802_11_OPERATION_MODE estiver definido. Para obter mais informações, consulte DOT11_CURRENT_OPERATION_MODE.

vSwitchSourcePortId

Um identificador exclusivo para a porta de origem no comutador virtual.

vSwitchSourceNicIndex

Um índice para a NIC de origem no comutador virtual.

vSwitchDestinationPortId

Um identificador exclusivo para a porta de destino no comutador virtual.

padding0

Reservado.

padding1

Reservado.

padding2

Reservado.

vSwitchPacketContext

Um identificador para o contexto do pacote de comutador virtual.

subProcessTag

Reservado.

reserved1

Reservado.

Observações

O mecanismo de filtro passa um ponteiro para uma estrutura de FWPS_INCOMING_METADATA_VALUES0 para a função de texto explicativo classifyFn. Os valores de metadados contidos na estrutura não são processados pelo mecanismo de filtro, mas são fornecidos para a função de texto explicativo classifyFn para fornecer informações adicionais.

Um driver de texto explicativo pode usar a macro a seguir para testar se um valor de metadados específico está presente em uma estrutura de FWPS_INCOMING_METADATA_VALUES0:

FWPS_IS_METADATA_FIELD_PRESENT(metadataValues, metadataField)

Se o valor de metadados FWPS_METADATA_FIELD_PACKET_DIRECTION estiver presente em uma estrutura de FWPS_INCOMING_METADATA_VALUES0, o membro packetDirection especifica se o pacote foi de entrada ou saída durante uma operação de classificação de reautorização. Caso contrário, o valor dos metadados FWPS_METADATA_FIELD_PACKET_DIRECTION não está presente.

O driver explicativo deve seguir estas diretrizes ao inspecionar o pacote:

  • Nas camadas de conexão ou recebimento/aceitação do ALE, o driver de texto explicativo não deve assumir que o pacote contém um cabeçalho IP válido se packetDirection estiver definido como FWP_DIRECTION_OUTBOUND e o valor de metadados FWPS_METADATA_FIELD_PACKET_DIRECTION estiver presente.
  • Na camada de conexão ALE, se o valor de metadados FWPS_METADATA_FIELD_PACKET_DIRECTION não estiver presente, o driver de texto explicativo deverá assumir uma direção de pacote de FWP_DIRECTION_OUTBOUND.
  • Na camada de recebimento/aceitação do ALE, se o valor dos metadados FWPS_METADATA_FIELD_PACKET_DIRECTION não estiver presente, o driver de texto explicativo deverá assumir uma direção de pacote de FWP_DIRECTION_INBOUND.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível a partir do Windows Vista.
cabeçalho fwpsk.h (inclua Fwpsk.h)

Consulte também