Verarbeitungsfluss: Löschen von Legenden
Wenn ein Datenfluss, der von einer Legende verarbeitet wird, beendet wird, ruft die Filter-Engine die Calloutfunktion flowDeleteFn der Legende auf, wenn der Legendentreiber dem Datenfluss zuvor einen Kontext zugeordnet hat. Die Beschriftungsfunktion flowDeleteFn einer Legende führt alle erforderlichen sauber des Kontexts aus, den der Legendentreiber dem Datenfluss zugeordnet hat, bevor der Datenfluss beendet wird.
Beispiel:
// 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
);
}
Die Filter-Engine entfernt automatisch den Kontext, den eine Legende einem Datenfluss zugeordnet ist, wenn der Datenfluss beendet wird. Daher ist keine Legende erforderlich, um die FwpsFlowRemoveContext0-Funktion aus ihrer flowDeleteFn-Beschriftungsfunktion aufzurufen, um den Kontext aus dem Datenfluss zu entfernen.