Memproses Callout Penghapusan Alur
Saat aliran data yang sedang diproses oleh callout dihentikan, mesin filter memanggil fungsi callout flowDeleteFn callout jika driver callout sebelumnya mengaitkan konteks dengan aliran data. Fungsi callout flowDeleteFn callout melakukan pembersihan konteks yang diperlukan agar driver callout yang terkait dengan aliran data sebelum aliran data dihentikan.
Contohnya:
// Context structure to be associated with data flows
typedef struct FLOW_CONTEXT_ {
...
} FLOW_CONTEXT, *PFLOW_CONTEXT;
#define FLOW_CONTEXT_POOL_TAG 'fcpt'
// flowDeleteFn callout function
VOID NTAPI
FlowDeleteFn(
IN UINT16 layerId,
IN UINT32 calloutId,
IN UINT64 flowContext
)
{
PFLOW_CONTEXT context;
// Get the flow context structure
context = (PFLOW_CONTEXT)flowContext;
// Cleanup the flow context structure
...
// Free the memory for the flow context structure
ExFreePoolWithTag(
context,
FLOW_CONTEXT_POOL_TAG
);
}
Mesin filter secara otomatis menghapus konteks bahwa callout yang terkait dengan aliran data saat aliran data dihentikan. Oleh karena itu, callout tidak diperlukan untuk memanggil fungsi FwpsFlowRemoveContext0 dari fungsi callout flowDeleteFn-nya untuk menghapus konteks dari aliran data.