Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Componente unione utilizzato quando il campo MajorFunction della struttura FLT_IO_PARAMETER_BLOCK per l'operazione è IRP_MJ_FILE_SYSTEM_CONTROL.
Sintassi
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
} VerifyVolume;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
} FileSystemControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Membri
FileSystemControl: struttura contenente i membri seguenti.
VerifyVolume: componente unione usato per le operazioni di IRP_MN_VERIFY_VOLUME.
Vpb: puntatore al blocco di parametri del volume (VPB) per il volume da verificare.
DeviceObject: puntatore all'oggetto dispositivo per verificare il volume.
Comune: componente union usato per tutti i metodi di buffering per le operazioni di IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST.
Common.OutputBufferLength: lunghezza, in byte, del buffer a cui punta il membro Neither.OutputBuffer o Direct.OutputBuffer .
Common.InputBufferLength: lunghezza, in byte, del buffer a cui punta il membro Neither.InputBuffer, Buffered.SystemBuffer o Direct.InputSystemBuffer .
Common.FsControlCode: codice della funzione FSCTL da passare al file system, al filtro del file system o al driver minifiltro per il dispositivo di destinazione.
Per informazioni dettagliate sulle richieste IOCTL e FSCTL, vedere Uso dei codici di controllo I/O nella Guida all'architettura in modalità kernel e "Codici di controllo di input e output del dispositivo" nella documentazione di Microsoft Windows SDK. Questa risorsa potrebbe non essere disponibile in alcune lingue e paesi.
Né: componente union utilizzato per le operazioni di IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando il metodo di buffering è METHOD_NEITHER. Per altre informazioni sui metodi di buffering, vedere Definizione dei codici di controllo di I/O.
Neither.InputBuffer: indirizzo virtuale in modalità utente del buffer di input fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifiltro deve usare routine come ProbeForRead, ProbeForWrite e MmProbeAndLockPages, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Uso di errori e I/O non memorizzati nel buffer né direttinel riferimento agli indirizzi User-Space.
Neither.OutputBuffer: indirizzo virtuale in modalità utente del buffer di output fornito dal richiedente originale dell'operazione. Gestione I/O e Gestione filtri non convalidano questi indirizzi. Per garantire che gli indirizzi dello spazio utente siano validi, il minifiltro deve usare routine come ProbeForRead, ProbeForWrite e MmProbeAndLockPages, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Uso di errori e I/O non memorizzati nel buffer né direttinel riferimento agli indirizzi User-Space. Neither.OutputBuffer è facoltativo e può essere NULL se un MDL viene fornito in Neither.OutputMdlAddress. Vedere la sezione Osservazioni.
Neither.OutputMdlAddress: indirizzo di un elenco di descrittori di memoria (MDL) che descrive il buffer a cui punta il membro Neither.OutputBuffer . Questo membro è facoltativo e può essere NULL se viene fornito un buffer in Neither.OutputBuffer.
Memorizzato nel buffer: componente unione usato per le operazioni di IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando il metodo di buffering è METHOD_BUFFERED. Per altre informazioni sui metodi di buffering, vedere Definizione dei codici di controllo di I/O.
Buffered.SystemBuffer: indirizzo del buffer allocato dal sistema per l'operazione. In METHOD_BUFFERED I/O questo buffer viene usato sia per l'input che per l'output. Per altre informazioni, vedere Metodi per l'accesso ai buffer di dati.
Diretto: componente unione utilizzato per le operazioni di IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando il metodo di buffering viene METHOD_IN_DIRECT o METHOD_OUT_DIRECT. Per altre informazioni sui metodi di buffering, vedere Definizione dei codici di controllo di I/O nella Guida all'architettura della modalità kernel.
Direct.InputSystemBuffer: indirizzo del buffer di input per l'operazione. Questo buffer è bloccato dal sistema operativo in modo che sia sicuro accedere dalla modalità kernel. Per altre informazioni, vedere Metodi per l'accesso ai buffer di dati.
Direct.OutputBuffer: indirizzo virtuale in modalità utente del buffer di output fornito dal richiedente originale dell'operazione. In I/O diretto, a differenza di METHOD_NEITHER I/O, il sistema operativo blocca questo buffer in modo che sia sicuro accedere dalla modalità kernel, purché il minifiltro si trova nello stesso contesto del processo del richiedente originale dell'operazione di I/O. In caso contrario, deve chiamare MmGetSystemAddressForMdlSafe per ottenere l'indirizzo di sistema dal file MDL a cui punta il membro OutputMdlAddress . Per altre informazioni, vedere Using Direct I/O and Errors in Direct I/O .For more information, see Using Direct I/O and Errors in Direct I/O.
Direct.OutputMdlAddress: indirizzo di un elenco di descrittori di memoria (MDL) che descrive il buffer a cui punta il membro Direct.OutputBuffer . Questo membro è obbligatorio e non può essere NULL.
Osservazioni:
La struttura FLT_PARAMETERS per le operazioni di IRP_MJ_FILE_SYSTEM_CONTROL contiene i parametri per un'operazione file system-control-information rappresentata da una struttura di dati di callback (FLT_CALLBACK_DATA). È contenuto in una struttura FLT_IO_PARAMETER_BLOCK .
Se vengono forniti entrambi un buffer Neither.OutputBuffer e Neither.MdlAddress , è consigliabile che i minifiltri usino il MDL.
Se un minifiltro modifica il valore di Neither.MdlAddress, dopo il callback dell'operazione successiva, Gestione filtri libera il file MDL attualmente archiviato in Neither.MdlAddress e ripristina il valore precedente di Neither.MdlAddress.
IRP_MJ_FILE_SYSTEM_CONTROL è un'operazione basata su IRP.
Requisiti
| Tipo di requisito | Requisito |
|---|---|
| Header | Fltkernel.h (include Fltkernel.h) |