FLT_PARAMETERS per l'unione IRP_MJ_FILE_SYSTEM_CONTROL
Componente union utilizzato quando il campo MajorFunction della struttura FLT_IO_PARAMETER_BLOCK per l'operazione viene 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;
Members
FileSystemControl: struttura contenente i membri seguenti.
VerifyVolume: componente union 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 il volume da verificare.
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 MDFTL da passare al file system, al filtro del file system o al driver minifilter per il dispositivo di destinazione.
Per informazioni dettagliate sulle richieste IOCTL e SSHTL, vedere Using I/O Control Codes in the Kernel Mode Architecture Guide and "Device Input and Output Control Codes" (Uso dei codici di controllo I/O) nella documentazione di Microsoft Windows SDK. Questa risorsa potrebbe non essere disponibile in alcune lingue e paesi.
Né: componente union usato per le operazioni di IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando il metodo di memorizzazione nel buffer è METHOD_NEITHER. Per altre informazioni sui metodi di memorizzazione nel buffer, 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 minifilter deve usare routine come ProbeForRead, ProbeForWrite e MmProbeAndLockPages, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses .For more information, see Using Nor Buffered nor Direct I/O and Errors in referencing User-Space Addresses.
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 minifilter deve usare routine come ProbeForRead, ProbeForWrite e MmProbeAndLockPages, racchiudendo tutti i riferimenti al buffer in blocchi try/except . Per altre informazioni, vedere Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses .For more information, see Using Nor Buffered nor Direct I/O and Errors in referencing User-Space Addresses. 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.
Buffered: componente union 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 memorizzazione nel buffer, 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 union usato 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 memorizzazione nel buffer, 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 minifilter 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.
Commenti
La struttura FLT_PARAMETERS per IRP_MJ_FILE_SYSTEM_CONTROL operazioni contiene i parametri per un'operazione di informazioni sul controllo del file system 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 usare i minifiltri.
Se un minifilter modifica il valore di Neither.MdlAddress, dopo il callback post-operazione, 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 |
---|---|
Intestazione | Fltkernel.h (include Fltkernel.h) |