Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby określić, jakie dane powinny być rejestrowane, funkcja callout classifyFn może sprawdzić dowolną kombinację pól danych, pól metadanych i wszelkich surowych danych przekazanych do niej, a także wszelkich odpowiednich danych przechowywanych w kontekście skojarzonym z filtrem lub przepływem danych.
Na przykład, jeśli wywołanie śledzi liczbę przychodzących (inbound) pakietów IPv4 odrzucanych przez filtr w warstwie sieciowej, wywołanie jest dodawane do silnika filtru w warstwie FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD. W takiej sytuacji funkcja wywołania klasyfikujFn może wyglądać podobnie do następującego przykładu:
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;
}