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.

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

Vedi anche

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile