Поделиться через


Удаление аннотаций потока обработки

При остановке потока данных, обрабатываемого вызовом, фильтрующий механизм вызывает функцию 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
    );
}

Модуль фильтров автоматически удаляет контекст, связанный с привязкой к потоку данных, при остановке этого потока. Поэтому выноска не требуется для вызова функции FwpsFlowRemoveContext0 из функции выноски flowDeleteFn , чтобы удалить контекст из потока данных.