Eliminar Chamadas do Fluxo de Processamento
Quando um fluxo de dados processado por uma chamada é interrompido, o mecanismo de filtro chama a função de chamada flowDeleteFn, caso o driver da chamada tenha associado anteriormente um contexto ao fluxo de dados. A função de chamada flowDeleteFn executa qualquer limpeza necessária do contexto que o driver associado ao fluxo de dados antes de o fluxo de dados ser interrompido.
Por exemplo:
// 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
);
}
O mecanismo de filtro remove automaticamente o contexto que um apontamento associado a um fluxo de dados quando o fluxo de dados é interrompido. Portanto, um texto explicativo não é necessário para chamar a função deFwpsFlowRemoveContext0 dode sua função de texto explicativo flowDeleteFn para remover o contexto do fluxo de dados.