处理流删除标注

停止由标注处理的数据流时,如果标注驱动程序以前将上下文与数据流关联,则筛选器引擎会调用标注的 flowDeleteFn 标注函数。 标注的 flowDeleteFn 标注函数在数据流停止之前对标注驱动程序与数据流关联的上下文执行任何必要的清理。

例如:

// 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
    );
}

当数据流停止时,筛选器引擎会自动删除与数据流关联的标注的上下文。 因此,从其 flowDeleteFn 标注函数调用 FwpsFlowRemoveContext0 函数不需要标注即可从数据流中删除上下文。