Log de dados

Para determinar quais dados devem ser registrados, a função de texto explicativo classifyFn de um texto explicativo pode inspecionar qualquer combinação dos campos de dados, os campos de metadados e todos os dados brutos que são passados para ele, bem como quaisquer dados relevantes que foram armazenados em um contexto associado ao filtro ou ao fluxo de dados.

Por exemplo, se um texto explicativo controlar quantos pacotes IPv4 de entrada (entrada) serão descartados por um filtro na camada de rede, o texto explicativo será adicionado ao mecanismo de filtro na camada FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD. Nessa situação, a função de texto explicativo classifyFn do texto explicativo pode ser semelhante ao exemplo a seguir:

ULONG TotalDiscardCount = 0;
ULONG FilterDiscardCount = 0;

// classifyFn callout function
VOID NTAPI
 ClassifyFn(
    IN const FWPS_INCOMING_VALUES0  *inFixedValues,
    IN const FWPS_INCOMING_METADATA_VALUES0  *inMetaValues,
    IN OUT VOID  *layerData,
    IN const FWPS_FILTER0  *filter,
    IN UINT64  flowContext,
    IN OUT FWPS_CLASSIFY_OUT  *classifyOut
    )
{
  // Increment the total count of discarded packets
 InterlockedIncrement(&TotalDiscardCount);


  // Check whether a discard reason metadata field is present
 if (FWPS_IS_METADATA_FIELD_PRESENT(
 inMetaValues,
        FWPS_METADATA_FIELD_DISCARD_REASON))
  {
    // Check whether it is a general discard reason
 if (inMetaValues->discardMetadata.discardModule ==
        FWPS_DISCARD_MODULE_GENERAL)
    {
      // Check whether discarded by a filter
 if (inMetaValues->discardMetadata.discardReason ==
          FWPS_DISCARD_FIREWALL_POLICY)
      {
        // Increment the count of packets discarded by a filter
 InterlockedIncrement(&FilterDiscardCount);
      }
    }
  }

  // Take no action on the data
 classifyOut->actionType = FWP_ACTION_CONTINUE;
}

classifyFn