Freigeben über


Datenprotokollierung

Um zu bestimmen, welche Daten protokolliert werden sollen, kann die Calloutfunktion klassifizierenFn eine beliebige Kombination der Datenfelder, der Metadatenfelder und aller Rohdaten, die an sie übergeben werden, sowie alle relevanten Daten überprüfen, die in einem Kontext gespeichert wurden, der dem Filter oder dem Datenfluss zugeordnet ist.

Wenn beispielsweise eine Legende nachverfolgt, wie viele eingehende (eingehende) IPv4-Pakete von einem Filter auf der Netzwerkebene verworfen werden, wird die Legende der Filter-Engine auf der FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD-Ebene hinzugefügt. In dieser Situation ähnelt die Legendenfunktion klassifizierenFn dem folgenden Beispiel:

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

klassifizierenFn