Condividi tramite


IRP_MJ_FILE_SYSTEM_CONTROL (fs e driver di filtro)

Data di invio

I/O Manager, altri componenti del sistema operativo e altri driver in modalità kernel inviano richieste IRP_MJ_FILE_SYSTEM_CONTROL. Può essere inviato, ad esempio, quando un'applicazione in modalità utente ha chiamato la funzione Win32 DeviceIoControl per inviare una richiesta di controllo I/O del file system (MDFTL).

Operazione: driver del file system

Il driver o il riconoscitore del file system deve controllare il codice di funzione secondario per determinare quale operazione di controllo del file system è richiesta.

I driver del file system devono gestire i codici di funzione secondari seguenti:

Codice Descrizione
IRP_MN_KERNEL_CALL Questa richiesta è uguale a IRP_MN_USER_FS_REQUEST (descritta di seguito), ad eccezione del fatto che l'origine della richiesta è un componente kernel attendibile.
IRP_MN_MOUNT_VOLUME Indica una richiesta di montaggio del volume. Se un driver del file system riceve questo IRP per un volume il cui formato non corrisponde a quello del file system, il driver del file system deve restituire STATUS_UNRECOGNIZED_VOLUME.
IRP_MN_USER_FS_REQUEST Indica una richiesta MDFTL, possibilmente per conto di un'applicazione in modalità utente che ha chiamato la funzione DeviceIoControl Di Microsoft Win32 o per conto di un componente in modalità kernel che ha chiamato ZwDeviceIoControlFile o IoBuildDeviceIoControlRequest. Per informazioni dettagliate sulle richieste PROVISIONTL, vedere "Codici di controllo di input e output del dispositivo" nella documentazione di Windows SDK.
IRP_MN_VERIFY_VOLUME Indica una richiesta di verifica del volume. Per i supporti rimovibili, il file system deve verificare il volume quando rileva che il supporto è stato rimosso e restituito per assicurarsi che sia ancora lo stesso volume noto. Se il volume è stato modificato, il file system deve invalidare tutti gli handle in sospeso. Dovrebbe anche restituire un errore se il file system in questo nuovo supporto è stato modificato. Questa richiesta viene spesso usata per le unità floppy.

I riconoscitori del file system devono gestire il codice di funzione secondario seguente:

Codice Descrizione
IRP_MN_LOAD_FILE_SYSTEM Indica una richiesta di caricamento del file system.

Il driver o il riconoscitore del file system deve eseguire l'operazione richiesta e quindi completare l'IRP.

Operazione: driver di filtro del sistema di file legacy

Il driver di filtro deve passare questo IRP al driver inferiore successivo nello stack.

Parametri

Un file system o un driver di filtro chiama IoGetCurrentIrpStackLocation per l'IRP specificato per ottenere un puntatore alla propria posizione dello stack in IRP. Nei parametri seguenti Irp punta all'IRP e all'IrpSp punta al IO_STACK_LOCATION. Il driver può usare il set di informazioni nei membri seguenti del percorso dello stack IRP e IRP per elaborare una richiesta di controllo del file system:

  • DeviceObject è un puntatore all'oggetto dispositivo di destinazione.

  • Irp->AssociatedIrp.SystemBuffer punta a un buffer di input fornito dal sistema da passare al driver di filtro del file system o del file system per il volume di destinazione. Usato per METHOD_BUFFERED o METHOD_DIRECT I/O. Se questo parametro è obbligatorio dipende dal codice di controllo del file system specifico.

  • Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta.

  • Irp->MdlAddress è l'indirizzo di un elenco di descrittori di memoria (MDL) che descrive un buffer di output da passare al driver di filtro del file system o del file system per il volume di destinazione. Usato per METHOD_DIRECT I/O. Se questo parametro è obbligatorio dipende dal codice di controllo di I/O specifico.

  • Irp->UserBuffer punta a un buffer di output fornito dal chiamante da passare al file system o al driver di filtro del file system per il volume di destinazione. Usato per METHOD_BUFFERED o METHOD_NEITHER I/O. Se questo parametro è facoltativo o obbligatorio dipende dal codice di controllo di I/O specifico.

  • IrpSp->FileObject punta all'oggetto file associato a DeviceObject.

    Il parametro IrpSp-FileObject> contiene un puntatore al campo RelatedFileObject, che è anche una struttura FILE_OBJECT. Il campo RelatedFileObject della struttura FILE_OBJECT non è valido durante l'elaborazione di IRP_MJ_FILE_SYSTEM_CONTROL e non deve essere usato.

  • IrpSp->I flag possono essere impostati su SL_ALLOW_RAW_MOUNT per IRP_MN_VERIFY_VOLUME.

  • IrpSp->MajorFunction è impostato su IRP_MJ_FILE_SYSTEM_CONTROL.

  • IrpSp->MinorFunction può essere impostato su uno dei valori seguenti.

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode è il codice della funzione MDFTL da passare al driver di filtro del file system o del file system per il volume di destinazione. Per l'uso solo con IRP_MN_USER_FS_REQUEST.

    Per informazioni dettagliate sulle richieste IOCTL e SSHTL, vedere Using I/O Control Codes and "Device Input and Output Control Codes" (Uso dei codici di controllo di I/O e output) nella documentazione di Windows SDK.

  • IrpSp->Parameters.FileSystemControl.InputBufferLength è la dimensione in byte del buffer a cui punta Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength è la dimensione in byte del buffer a cui punta Irp-UserBuffer>.

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer è il buffer di input per le richieste in modalità kernel tramite METHOD_NEITHER.

  • IrpSp->Parameters.MountVolume.DeviceObject punta all'oggetto dispositivo per il dispositivo effettivo in cui deve essere montato il volume. I driver di filtro del file system non devono usare questo parametro.

  • IrpSp->Parameters.MountVolume.Vpb punta al blocco di parametri del volume (VPB) per il volume da montare. I file system che supportano supporti rimovibili potrebbero sostituire un VPB usato in precedenza per quello passato in questo parametro. In questi file system, dopo il montaggio del volume, questo puntatore non può più essere considerato valido. I driver di filtro del file system che filtrano questi file system devono usare questo parametro come indicato di seguito: il filtro deve salvare il valore di IrpSp-Parameters.MountVolume.Vpb-RealDevice>> prima di inviare IRP ai driver di livello inferiore. Dopo aver montato correttamente il volume, il filtro può usare questo puntatore all'oggetto dispositivo di archiviazione per ottenere il puntatore VPB corretto.

  • IrpSp->Parameters.VerifyVolume.DeviceObject punta all'oggetto dispositivo per il volume da verificare.

  • IrpSp->Parameters.VerifyVolume.Vpb punta al VPB per il volume da verificare.

Vedi anche

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile