IRP_MJ_SET_INFORMATION (fs e driver di filtro)

Data di invio

I/O Manager, altri componenti del sistema operativo e altri driver in modalità kernel inviano la richiesta di IRP_MJ_SET_INFORMATION. Può essere inviato, ad esempio, quando un'applicazione in modalità utente ha chiamato una funzione Win32, ad esempio SetEndOfFile o quando un componente in modalità kernel ha chiamato ZwSetInformationFile.

Operazione: driver del file system

Il driver del file system deve estrarre e decodificare l'oggetto file per determinare se rappresenta un file utente o una directory aperta. In caso affermativo, il driver del file system deve elaborare la richiesta in base alle esigenze e completare l'IRP.

I tipi di informazioni seguenti possono essere impostati su file e directory:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (per i file system che consentono la creazione di cicli nella gerarchia di directory)
  • FilePositionInformation
  • FileRenameInformation

I tipi di informazioni seguenti possono essere impostati solo sui file:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation: per i file system (ad esempio NTFS) che non consentono la creazione di cicli nella gerarchia di directory
  • FileValidDataLengthInformation

Operazione: driver di filtro del file system 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 le informazioni impostate nei membri seguenti dell'IRP e nel percorso dello stack IRP per elaborare una richiesta di informazioni sui file impostata:

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

  • Irp->AssociatedIrp.SystemBuffer punta a un buffer di input che contiene le informazioni sul file o sulla directory da impostare. Queste informazioni vengono archiviate in una delle strutture seguenti:

  • Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta. Per altre informazioni, vedere la descrizione del parametro IoStatusBlock in ZwSetInformationFile.

  • IrpSp->FileObject punta all'oggetto file associato a DeviceObject. Questo parametro 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_SET_INFORMATION e non deve essere usato.

  • IrpSp->MajorFunction* è impostato su IRP_MJ_SET_INFORMATION.

  • IrpSp->MinorFunction* può essere IRP_MN_KERNEL_CALL quando Irp-Parameters.SetFile.FileInformationClass> è FileValidDataLengthInformation. Questo codice indica che l'origine della richiesta è un componente kernel attendibile, consentendo ai driver di ignorare i controlli di sicurezza.

  • IrpSp->Parameters.SetFile.AdvanceOnly è un flag per le operazioni di fine file. Questo flag determina l'uso del membro EndOfFileFILE_END_OF_FILE_INFORMATION struttura quando FileInformationClass è FileEndOfFileInformation. Se TRUE, una nuova lunghezza di dati valida per il file viene impostata da EndOfFile solo se aumenta la lunghezza dei dati valida corrente. Se FALSE, viene impostata una nuova dimensione del file da EndOfFile.

  • IrpSp->Parameters.SetFile.ClusterCount è riservato per l'uso del sistema.

  • IrpSp->Parameters.SetFile.DeleteHandle è riservato per l'uso del sistema.

  • IrpSp->Parameters.SetFile.FileInformationClass indica il tipo di informazioni da impostare per il file e può essere uno dei valori seguenti.

    Valore Significato
    FileAllocationInformation Impostare FILE_ALLOCATION_INFORMATION per il file.
    FileBasicInformation Impostare FILE_BASIC_INFORMATION per il file.
    FileDispositionInformation Impostare FILE_DISPOSITION_INFORMATION per il file.
    FileEndOfFileInformation Impostare FILE_END_OF_FILE_INFORMATION per il file.
    FileLinkInformation Impostare FILE_LINK_INFORMATION per il file.
    FilePositionInformation Impostare FILE_POSITION_INFORMATION per il file.
    FileRenameInformation Impostare FILE_RENAME_INFORMATION per il file.
    FileValidDataLengthInformation Impostare FILE_VALID_DATA_LENGTH_INFORMATION per il file. Per altre informazioni, vedere Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject è destinato alle operazioni di ridenominazione o collegamento. Se Irp-AssociatedIrp.SystemBuffer-FileName>> contiene un nome di file completo o se Irp-AssociatedIrp.SystemBuffer-RootDirectory>> non è NULL, questo membro è un puntatore a oggetti file per la directory padre del file di destinazione dell'operazione. In caso contrario, è NULL.

  • IrpSp->Parameters.SetFile.Length è la lunghezza, espressa in byte, del buffer a cui punta Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.SetFile.ReplaceIfExists è impostato su TRUE per specificare che se esiste già un file con lo stesso nome, deve essere sostituito con il file specificato. Impostare su FALSE se l'operazione di ridenominazione non riesce se esiste già un file con il nome specificato.

Commenti

Il membro AdvanceOnly è impostato su TRUE dalla gestione cache per notificare al file system di avanzare la lunghezza dei dati valida corrente sul disco fino alla nuova lunghezza dei dati valida in EndOfFile. Se AdvanceOnly è FALSE, viene impostata una nuova dimensione del file, nel membro EndOfFile , che può essere maggiore o minore delle dimensioni correnti del file.

Vedi anche

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile