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.