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) |