Callout di eliminazione del flusso di elaborazione
Quando viene arrestato un flusso di dati elaborato da un callout, il motore di filtro chiama la funzione callout flowDeleteFn del callout se il driver di callout ha precedentemente associato un contesto al flusso di dati. La funzione di callout flowDeleteFn di un callout esegue qualsiasi pulizia necessaria del contesto associato al flusso di dati prima dell'arresto del flusso di dati.
Ad esempio:
// 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
);
}
Il motore di filtro rimuove automaticamente il contesto associato a un flusso di dati quando il flusso di dati viene arrestato. Pertanto, non è necessario chiamare la funzione FwpsFlowRemoveContext0 dalla funzione di callout flowDeleteFn per rimuovere il contesto dal flusso di dati.