struttura FLT_IO_PARAMETER_BLOCK (fltkernel.h)

La struttura FLT_IO_PARAMETER_BLOCK contiene i parametri per l'operazione di I/O rappresentata da una struttura dei dati di callback FLT_CALLBACK_DATA .

Sintassi

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Members

IrpFlags

Maschera di bit di flag che specificano vari aspetti dell'operazione di I/O. Questi flag vengono usati solo per le operazioni basate su IRP. Nella tabella seguente vengono illustrati i valori dei flag.

Valore Significato
IRP_BUFFERED_IO L'operazione è un'operazione di I/O memorizzata nel buffer.
IRP_CLOSE_OPERATION L'operazione è un'operazione di pulizia o chiusura.
IRP_DEALLOCATE_BUFFER Gestione I/O libera il buffer durante la fase di completamento per l'IRP.
IRP_INPUT_OPERATION L'operazione è un'operazione di input.
IRP_NOCACHE L'operazione è un'operazione di I/O non memorizzata nella cache.
IRP_PAGING_IO L'operazione è un'operazione di I/O di paging.
IRP_SYNCHRONOUS_API L'operazione di I/O è sincrona.
IRP_SYNCHRONOUS_PAGING_IO L'operazione è un'operazione di I/O di paging sincrona.
IRP_MOUNT_COMPLETION Un montaggio del volume viene completato per l'operazione.
IRP_CREATE_OPERATION L'operazione è un'operazione di creazione o apertura.
IRP_READ_OPERATION L'operazione di I/O è destinata alla lettura.
IRP_WRITE_OPERATION L'operazione di I/O è destinata alla scrittura.
IRP_DEFER_IO_COMPLETION Il completamento di I/O dell'operazione viene posticipato.
IRP_ASSOCIATED_IRP L'operazione è associata a un IRP master.
IRP_OB_QUERY_NAME L'operazione è una query con nome asincrono.
IRP_HOLD_DEVICE_QUEUE Riservato.
IRP_UM_DRIVER_INITIATED_IO L'operazione ha avuto origine da un driver in modalità utente.

MajorFunction

Codice della funzione principale per l'operazione di I/O. I codici di funzione principali vengono usati per le operazioni basate su IRP, le operazioni di I/O veloci e le operazioni di callback del file system (FSFilter). Per altre informazioni sulle operazioni aggiuntive, vedere FLT_PARAMETERS.

MinorFunction

Codice di funzione secondario per l'operazione di I/O. Questo membro è facoltativo e può essere NULL. Il valore del membro MajorFunction determina i valori possibili. Per altre informazioni sui codici di funzione secondaria, vedere FLT_PARAMETERS.

OperationFlags

Maschera di bit di flag che specificano vari aspetti dell'operazione di I/O. Questi flag vengono usati solo per le operazioni basate su IRP. Gestione filtri copia questi flag dal membro Flags della struttura IO_STACK_LOCATION associata all'IRP. Nella tabella seguente vengono illustrati i valori di flag usati più di frequente.

Valore Significato
SL_CASE_SENSITIVE Usato per IRP_MJ_CREATE. Se questo flag è impostato, i confronti dei nomi di file devono fare distinzione tra maiuscole e minuscole.
SL_EXCLUSIVE_LOCK Usato per IRP_MJ_LOCK_CONTROL. Se questo flag è impostato, viene richiesto un blocco di intervallo di byte esclusivo. In caso contrario, viene richiesto un blocco condiviso.
SL_FAIL_IMMEDIATELY Usato per IRP_MJ_LOCK_CONTROL. Se questo flag è impostato, la richiesta di blocco deve avere esito negativo se non può essere concessa immediatamente.
SL_FORCE_ACCESS_CHECK Usato per IRP_MJ_CREATE. Se questo flag è impostato, i controlli di accesso devono essere eseguiti anche se il valore del membro RequestorMode di IRP è KernelMode.
SL_FORCE_DIRECT_WRITE Usato per IRP_MJ_WRITE e IOCTL_DISK_COPY_DATA. Se questo flag è impostato, i driver in modalità kernel possono scrivere in aree del volume in cui sono normalmente bloccati dalla scrittura a causa di motivi di sicurezza. Questo flag viene controllato sia a livello del file system che dello stack di archiviazione. Il flag SL_FORCE_DIRECT_WRITE è disponibile in Windows Vista e versioni successive di Windows.
SL_INDEX_SPECIFIED Usato per IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se questo flag è impostato, l'analisi delle informazioni relative a directory, quota o attributo esteso deve iniziare in corrispondenza della voce nell'elenco il cui indice è specificato.
SL_OPEN_PAGING_FILE Usato per IRP_MJ_CREATE. Se questo flag è impostato, il file è un file di paging.
SL_OPEN_TARGET_DIRECTORY Usato per IRP_MJ_CREATE. Se questo flag è impostato, la directory padre del file deve essere aperta.
SL_OVERRIDE_VERIFY_VOLUME Usato per IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READ e IRP_MJ_WRITE. Se questo flag è impostato, l'operazione di I/O deve essere eseguita anche se il flag DO_VERIFY_VOLUME è impostato sull'oggetto dispositivo del volume.
SL_RESTART_SCAN Usato per IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se questo flag è impostato, l'analisi delle informazioni relative a directory, quota o attributo esteso deve iniziare dalla prima voce nella directory o nell'elenco. In caso contrario, l'analisi deve essere ripresa dall'analisi precedente.
SL_RETURN_SINGLE_ENTRY Usato per IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EA e IRP_MJ_SET_QUOTA. Se questo flag è impostato, l'analisi delle informazioni relative a directory, quota o attributo esteso deve restituire solo la prima voce trovata.
SL_WATCH_TREE Utilizzato per IRP_MJ_DIRECTORY_CONTROL. Se questo flag è impostato, è necessario controllare anche tutte le sottodirectory di questa directory. In caso contrario, è necessario controllare solo la directory stessa.
SL_WRITE_THROUGH Usato per IRP_MJ_WRITE. Se questo flag è impostato, i dati del file devono essere scritti in una risorsa di archiviazione permanente, non solo scritta nella cache.

Reserved

Riservato per l'utilizzo nel sistema. Non usare.

TargetFileObject

Puntatore a oggetti file per il file o la directory di destinazione per questa operazione di I/O.

TargetInstance

Puntatore di istanza opaco per il minifilter che rappresenta la destinazione per questa operazione di I/O.

Parameters

Struttura FLT_PARAMETERS che contiene i parametri per l'operazione di I/O specificata dai membri MajorFunction e MinorFunction .

Commenti

La struttura FLT_IO_PARAMETER_BLOCK contiene i parametri per l'operazione di I/O rappresentata da una struttura di dati di callback (FLT_CALLBACK_DATA). La struttura dei dati di callback contiene un puntatore alla struttura FLT_IO_PARAMETER_BLOCK nel membro Iopb .

Un minifilter riceve un puntatore alla struttura dei dati di callback come parametro di input Data o CallbackData ai tipi di routine di callback seguenti:

Le routine di callback di preoperazione e postoperazione di un minifilter possono modificare il contenuto della struttura di FLT_IO_PARAMETER_BLOCK per l'operazione di I/O, ad eccezione dei membri MajorFunction e Reserved . In caso affermativo, deve chiamare FltSetCallbackDataDirty, a meno che non abbia modificato anche il membro IoStatus della struttura dei dati di callback per l'operazione. In caso contrario, i valori modificati vengono ignorati.

Quando Gestione filtri rilascia un callback di preoperazione o postoperazione a un minifilter, FltObjects-FileObject> e TargetFileObject (CallbackData-Iopb-TargetFileObject>>) sono inizialmente uguali. Se un minifilter modifica TargetFileObject o TargetInstance, la chiamata successiva a FltSetCallbackDataDirty da un callback di preoperazione causerà la sostituzione di FltObjects-FileObjects-FileObject> e FltObjects-Instance> prima di inviare l'operazione a filtri inferiori.

Se la routine di callback di preoperazione di un minifilter modifica i parametri per un'operazione di I/O, tutti i minifiltri sotto di esso nello stack di istanze minifilter riceveranno i parametri modificati nelle routine di callback di preoperazione e postoperazione.

I parametri modificati non vengono ricevuti dalla routine di callback di postoperazione del minifilter o da eventuali minifiltri sopra indicati nello stack di istanze del minifilter. In tutti i casi, le routine di callback di preoperazione e postoperazione di un minifilter ricevono gli stessi valori dei parametri di input.

Se un minifiltro modifica il valore del membro TargetInstance , il nuovo valore deve essere un puntatore a un'istanza dello stesso minifiltro alla stessa altitudine in un volume diverso. Inoltre, l'oggetto dispositivo del nuovo volume deve avere una dimensione dello stack maggiore o uguale a quella dell'oggetto dispositivo del volume originale.

Per ottenere le dimensioni dello stack per un oggetto dispositivo del volume, dato un puntatore di istanza opaco per un'istanza collegata al volume, eseguire le operazioni seguenti:

  • Chiamare FltGetVolumeFromInstance per ottenere il puntatore del volume.
  • Chiamare FltGetDeviceObject per ottenere un puntatore all'oggetto dispositivo del volume. Questo puntatore viene restituito nel parametro DeviceObject . Le dimensioni dello stack dell'oggetto dispositivo sono disponibili in DeviceObject-StackSize>.
  • Quando il puntatore al volume non è più necessario, chiamare FltObjectDereference per decrementare il conteggio dei riferimenti.
  • Quando il puntatore all'oggetto dispositivo del volume non è più necessario, chiamare ObDereferenceObject per decrementare il numero di riferimenti.

Un minifilter può modificare il valore del membro TargetFileObject . Tuttavia, il nuovo valore deve essere un puntatore a un oggetto file per un file che risiede nello stesso volume dell'istanza specificata dal membro TargetInstance .

Un minifilter non può modificare in modo sicuro il valore del membro MajorFunction . Deve invece avviare una nuova operazione di I/O.

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 nella struttura FLT_IO_PARAMETER_BLOCK e passaggio della struttura dei dati di callback a FltPerformSynchronousIo o FltPerformAsynchronousIo.

Nota

Utilizzare le routine di supporto quando è possibile avviare le operazioni di I/O. Un minifilter deve allocare i propri dati di callback solo se non è presente alcuna funzione di supporto per una determinata operazione di I/O.

Requisiti

   
Intestazione fltkernel.h (include Fltkernel.h)

Vedi anche

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_DIRECTORY_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_LOCK_CONTROL

IRP_MJ_PNP

IRP_MJ_QUERY_EA

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_QUOTA

IRP_MJ_QUERY_SECURITY

IRP_MJ_QUERY_VOLUME_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_EA

IRP_MJ_SET_INFORMATION

IRP_MJ_SET_QUOTA

IRP_MJ_SET_SECURITY

IRP_MJ_SET_VOLUME_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_WRITE

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK