Partager via


Journalisation des données

Pour déterminer quelles données doivent être enregistrées, la fonction de légende classifyFn d’une légende peut inspecter n’importe quelle combinaison des champs de données, des champs de métadonnées et des données brutes qui lui sont transmises, ainsi que toutes les données pertinentes qui ont été stockées dans un contexte associé au filtre ou au flux de données.

Par exemple, si une légende effectue le suivi du nombre de paquets IPv4 entrants (entrants) ignorés par un filtre au niveau de la couche réseau, la légende est ajoutée au moteur de filtre au niveau de la couche FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD. Dans ce cas, la fonction de légende classFn de la légende peut ressembler à l’exemple suivant :

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

classFn