FLT_IO_PARAMETER_BLOCK struttura (fltkernel.h)

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 .

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 flag che specificano vari aspetti dell'operazione di I/O. Questi flag vengono usati solo per le operazioni basate su IRP. La tabella seguente mostra i valori del 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 concached.
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 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 è per la lettura.
IRP_WRITE_OPERATION L'operazione di I/O è per la scrittura.
IRP_DEFER_IO_COMPLETION Il completamento dell'operazione di I/O viene posticipato.
IRP_ASSOCIATED_IRP L'operazione è associata a un'IRP master.
IRP_OB_QUERY_NAME L'operazione è una query nome asincrona.
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 operazioni basate su IRP, operazioni di I/O veloci e 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 secondari, vedere FLT_PARAMETERS.

OperationFlags

Maschera di flag che specificano vari aspetti dell'operazione di I/O. Questi flag vengono usati solo per le operazioni basate su IRP. Filter Manager copia questi flag dal membro Flag della struttura IO_STACK_LOCATION associata all'IRP. La tabella seguente mostra i valori del flag più comunemente usati.

Valore Significato
SL_CASE_SENSITIVE Usato per IRP_MJ_CREATE. Se questo flag è impostato, i confronti dei nomi file devono essere distinzione tra maiuscole e minuscole.
SL_EXCLUSIVE_LOCK Usato per IRP_MJ_LOCK_CONTROL. Se questo flag è impostato, viene richiesto un blocco di byte-range 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 normalmente bloccate dalla scrittura a causa di motivi di sicurezza. Questo flag viene controllato sia nel livello dello stack di file system che nello 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 per directory, quota o informazioni sull'attributo esteso deve iniziare alla 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 di 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 sulla directory, la quota o l'attributo esteso devono iniziare alla prima voce della directory o dell'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 per directory, quota o informazioni sull'attributo esteso deve restituire solo la prima voce trovata.
SL_WATCH_TREE Usato per IRP_MJ_DIRECTORY_CONTROL. Se questo flag è impostato, tutte le sottodirectory di questa directory devono essere visualizzate anche. In caso contrario, solo la directory stessa deve essere osservata.
SL_WRITE_THROUGH Usato per IRP_MJ_WRITE. Se questo flag è impostato, i dati dei file devono essere scritti tramite l'archiviazione persistente, non solo scritti 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 opaco dell'istanza per il minifilter destinato a 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 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 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 Riservati . In caso affermativo, deve chiamare FltSetCallbackDataDirty, a meno che non sia stato modificato anche il membro IoStatus della struttura dei dati di callback per l'operazione. In caso contrario, i valori modificati vengono ignorati.

Quando Filter Manager genera un callback di preoperazione o postoperazione in 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-FileObjects-Instance>> prima di inviare l'operazione a filtri inferiori.

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

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

Se un minifilter modifica il valore del membro TargetInstance , il nuovo valore deve essere un puntatore a un'istanza dello stesso minifilter con la 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 volume, dato un puntatore di istanza opaca 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 del volume non è più necessario, chiamare FltObjectDereference per decrererne il conteggio dei riferimenti.
  • Quando il puntatore a oggetti del volume non è più necessario, chiamare ObDereferenceObject per decrererne il conteggio dei 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, ad esempio FltReadFile o chiamando FltAllocateCallbackData per allocare una struttura di dati di callback; inizializzare i parametri di I/O nella struttura FLT_IO_PARAMETER_BLOCK e passare la struttura dei dati di callback a FltPerformSynchronousIo o FltPerformAsynchronousIo.

Nota

Usare le routine di supporto ovunque possibile quando si avviano operazioni di I/O. Un minifilter deve allocare i propri dati di callback solo se non esiste alcuna funzione di supporto per un'operazione di I/O specifica.

Requisiti

Requisito Valore
Intestazione fltkernel.h (includere 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