Condividi tramite


Registrazione dei dati

Per determinare quali dati devono essere registrati, la funzione di callout di classificazioneFn di un callout può esaminare qualsiasi combinazione dei campi dati, dei campi dei metadati e di tutti i dati non elaborati passati, nonché tutti i dati pertinenti archiviati in un contesto associato al filtro o al flusso di dati.

Ad esempio, se un callout tiene traccia del numero di pacchetti IPv4 in ingresso (in ingresso) eliminati da un filtro a livello di rete, il callout viene aggiunto al motore di filtro al livello FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD. In questa situazione, la funzione di callout classificaFn del callout potrebbe essere simile all'esempio seguente:

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;
}

classificazioneFn