Dela via


Dataloggning

För att avgöra vilka data som ska loggas kan en utropsfunktions classifyFn inspektera alla kombinationer av datafälten, metadatafälten och eventuella rådata som skickas till den, samt all relevant data som har lagrats i en kontext associerad med filtret eller dataflödet.

Om ett utrop till exempel håller reda på hur många inkommande (inbound) IPv4-paket som släpps av ett filter i nätverkslagret läggs utropet till i filtermotorn vid FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD-lagret. I den här situationen kan "callout"-funktionens classifyFn "callout"-funktion likna följande exempel:

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