Freigeben über


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.