Condividi tramite


struttura FLT_CALLBACK_DATA (fltkernel.h)

La struttura FLT_CALLBACK_DATA rappresenta un'operazione di I/O. Gestione filtri e minifiltri usano questa struttura per avviare ed elaborare le operazioni di I/O.

Sintassi

typedef struct _FLT_CALLBACK_DATA {
  FLT_CALLBACK_DATA_FLAGS     Flags;
  PETHREAD                    Thread;
  PFLT_IO_PARAMETER_BLOCK     Iopb;
  IO_STATUS_BLOCK             IoStatus;
  struct _FLT_TAG_DATA_BUFFER *TagData;
  union {
    struct {
      LIST_ENTRY QueueLinks;
      PVOID      QueueContext[2];
    };
    PVOID FilterContext[4];
  };
  KPROCESSOR_MODE             RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

Members

Flags

Maschera di bit dei flag che descrivono l'operazione di I/O.

I minifiltri possono impostare il flag seguente.

Contrassegno Significato
FLTFL_CALLBACK_DATA_DIRTY Un minifilter imposta questo flag (chiamando FltSetCallbackDataDirty) per indicare che ha modificato il contenuto della struttura dei dati di callback. Per altre informazioni, vedere la sezione Osservazioni seguente.

Nota

Solo Gestione filtri può impostare i flag seguenti.

Quando Gestione filtri inizializza la struttura dei dati di callback, imposta uno dei flag seguenti per specificare il tipo di operazione di I/O rappresentata dalla struttura dei dati di callback.

Contrassegno Significato
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION La struttura dei dati di callback rappresenta un'operazione di I/O veloce.
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION La struttura dei dati di callback rappresenta un'operazione di callback minifilter del file system.
FLTFL_CALLBACK_DATA_IRP_OPERATION La struttura dei dati di callback rappresenta un'operazione basata su pacchetti di richiesta di I/O .

Nota

Solo Gestione filtri può impostare i flag seguenti.

Quando Gestione filtri inizializza la struttura dei dati di callback, può anche impostare i flag seguenti.

Contrassegno Significato
FLTFL_CALLBACK_DATA_GENERATED_IO La struttura dei dati di callback rappresenta un'operazione di I/O generata da un minifilter. Questo flag è valido solo per le operazioni basate su IRP.
FLTFL_CALLBACK_DATA_REISSUED_IO La struttura dei dati di callback rappresenta un'operazione di I/O che viene riemessa da un minifilter. Per eseguire nuovamente un'operazione di I/O, un minifiltro chiama FltReissueSynchronousIo. Questo flag è valido solo per le operazioni basate su IRP.
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER Il buffer per l'operazione di I/O è stato allocato da un pool non di paging. Questo flag può essere impostato per qualsiasi tipo di operazione di I/O. I minifiltri non devono mai impostare questo flag.

Nota

Solo Gestione filtri può impostare i flag seguenti.

Quando Gestione filtri esegue l'elaborazione di completamento per l'operazione di I/O rappresentata dalla struttura dei dati di callback, imposta uno o entrambi i flag seguenti.

Contrassegno Significato
FLTFL_CALLBACK_DATA_DRAINING_IO Gestione filtri imposta questo flag per indicare che sta svuotando il nodo di completamento per l'operazione di I/O. Questo flag è valido solo durante il completamento di I/O.
FLTFL_CALLBACK_DATA_POST_OPERATION Gestione filtri imposta questo flag per indicare che sta chiamando routine di callback post-operazione registrate (PFLT_POST_OPERATION_CALLBACK) per l'operazione. Questo flag è valido solo durante il completamento di I/O.

Thread

Puntatore al thread che ha avviato l'operazione di I/O. Questo campo può essere NULL.

Iopb

Puntatore a una struttura FLT_IO_PARAMETER_BLOCK che contiene i parametri per l'operazione di I/O.

IoStatus

Struttura IO_STATUS_BLOCK che contiene lo stato e le informazioni per l'operazione di I/O. Un minifilter può modificare il contenuto di questa struttura solo in una routine di callback preoperazionale (PFLT_PRE_OPERATION_CALLBACK) da cui sta per restituire FLT_PREOP_COMPLETE o in una routine di callback post-operazione (PFLT_POST_OPERATION_CALLBACK) da cui sta per restituire FLT_POSTOP_FINISHED_PROCESSING. In caso contrario, il contenuto di questa struttura viene normalmente impostato da Gestione filtri.

TagData

Puntatore a una struttura FLT_TAG_DATA_BUFFER contenente i dati dei punti di analisi per l'operazione di I/O. Questo puntatore è valido solo nel percorso di post-creazione. Pertanto, solo la routine di callback post-operazione di un minifilter può modificare il valore di questo membro. La routine di callback post-create di un minifilter può modificare questo membro in modo che punti a una struttura di FLT_TAG_DATA_BUFFER diversa. Tuttavia, se modifica il membro in modo che punti a una struttura diversa, deve prima chiamare ExFreePool per liberare la struttura esistente per evitare perdite di memoria del pool.

QueueLinks

Collegamenti di coda che un minifiltro può usare quando la coda dei dati di callback di Gestione filtri viene usata per eseguire l'operazione di I/O.

QueueContext[2]

Matrice di puntatori alle informazioni di contesto che un minifiltro può usare quando viene usata la coda di Gestione filtri per eseguire l'operazione di I/O.

FilterContext[4]

Matrice di puntatori alle informazioni di contesto che un minifiltro può usare quando viene usata una coda diversa dalla coda di Gestione filtri per eseguire l'operazione di I/O.

RequestorMode

Indica la modalità di esecuzione del processo che ha avviato l'operazione di I/O, KernelMode o UserMode.

Commenti

Un minifilter registra le routine di callback preoperazioni (PFLT_PRE_OPERATION_CALLBACK) e post-operazione (PFLT_POST_OPERATION_CALLBACK) per uno o più tipi di operazioni di I/O. Quando Gestione filtri chiama una di queste routine di callback, passa una struttura di dati di callback (FLT_CALLBACK_DATA) come primo parametro. Questa struttura rappresenta l'operazione di I/O.

La routine di callback precedente o post-operazione di un minifilter può modificare il contenuto della struttura dei dati di callback, ad eccezione dei membri Thread e RequestorMode . In caso affermativo, deve chiamare FltSetCallbackDataDirty, a meno che non abbia modificato anche il contenuto del membro IoStatus . In caso contrario, i valori modificati vengono ignorati.

Un minifilter può avviare un'operazione di I/O chiamando una routine di supporto come FltReadFile o chiamando FltAllocateCallbackData per allocare una struttura di dati di callback; inizializzazione dei parametri di I/O della struttura e passaggio della struttura a FltPerformSynchronousIo o FltPerformAsynchronousIo.

Un'operazione di I/O avviata da minifilter viene inviata solo alle istanze minifilter collegate sotto l'istanza chiamante e al file system. I minifiltri collegati sopra l'istanza specificata non ricevono l'operazione di I/O.

I minifiltri possono avviare solo operazioni di I/O basate su IRP. Non possono avviare operazioni di callback di I/O o file system veloci (FSFilter).

Requisiti

Requisito Valore
Intestazione fltkernel.h (include Fltkernel.h)

Vedi anche

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK