資料記錄
為了判斷應該記錄哪些資料,圖說文字的 classifyFn 圖說文字函式可以檢查資料欄位、元資料欄位,以及任何傳遞給該資料的原始資料,以及儲存在與篩選或資料流程相關內容中的任何相關資料。
例如,如果圖說文字持續追蹤網路層的篩選會捨棄多少傳入 (輸入) IPv4 封包,則圖說文字會新增至FWPM_LAYER_INBOUND_IPPACKET_V4_DISCARD層的篩選引擎。 在此情況下,圖說文字的 classifyFn 圖說文字函式可能類似下列範例:
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;
}