IRP_MJ_QUERY_INFORMATION (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_QUERY_INFORMATION. Questa richiesta può essere inviata, ad esempio, quando un'applicazione in modalità utente ha chiamato una funzione Win32, ad esempio GetFileInformationByHandle o quando un componente in modalità kernel ha chiamato ZwQueryInformationFile.

Operazione: driver del file system

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

I tipi di informazioni su file e directory su cui è possibile eseguire query sono dipendenti dal file system, ma in genere includono i valori seguenti:

  • FileAllInformation
  • FileAlternateNameInformation
  • FileAttributeTagInformation
  • FileBasicInformation
  • FileCompressionInformation
  • FileEaInformation
  • FileInternalInformation
  • FileNameInformation
  • FileNetworkOpenInformation
  • FilePositionInformation
  • FileStandardInformation
  • FileStreamInformation
  • FileHardLinkInformation

Anche se i tipi di informazioni FileAccessInformation, FileAlignmentInformation e FileModeInformation possono essere passati come parametro a ZwQueryInformationFile, queste informazioni sono indipendenti dal file system. Pertanto ZwQueryInformationFile fornisce queste informazioni direttamente, senza inviare una richiesta di IRP_MJ_QUERY_INFORMATION al file system.

Per un elenco di tutti i tipi di informazioni possibili, vedere l'enumerazione FILE_INFORMATION_CLASS in ntifs.h.

Operazione: driver del redirector di rete

Un driver di reindirizzamento di rete non basato su RDBSS che riceve una richiesta di IRP_MJ_QUERY_INFORMATION per FileAllInformation o FileNameInformation deve rispondere con il percorso completo "\server\share\file" per il nome file con una singola barra rovesciata iniziale prima del nome del server. Questo formato per le informazioni sul nome deve essere restituito per un file a cui si accede come nome UNC (Universal Naming Convention) ( ad esempio,\\server\share\folder\filename.txt) o un file che si trova in un'unità mappata ( ad esempiox:\folder\filename.txt, ).

Per un driver mini-redirector di rete (un driver che collega dinamicamente con rdbss.sys o che collega in modo statico con rdbsslib.lib), RDBSS gestisce una richiesta di IRP_MJ_QUERY_INFORMATION per FileNameInformation e restituisce le informazioni sul nome corrette. Per un driver di mini-reindirizzamento di rete, RDBSS gestisce una richiesta di IRP_MJ_QUERY_INFORMATION per FileAllInformation per la parte relativa alle informazioni sul nome della richiesta. Le altre parti della richiesta FileAllInformation vengono inviate come richieste separate al driver mini-redirector di rete da risolvere.

Un redirector di rete che riceve una richiesta di IRP_MJ_QUERY_INFORMATION per FileAlternateNameInformation deve rispondere con il nome breve (8,3 caratteri) per il file senza informazioni sul percorso, se esiste un nome breve per il file.

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 di IRP e il percorso dello stack IRP per elaborare una richiesta di informazioni sui file di query:

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

  • Irp->AssociatedIrp.SystemBuffer punta al buffer di output in cui devono essere restituite le informazioni sul file o sulla directory. Queste informazioni vengono archiviate in una delle strutture seguenti:

  • FILE_ALL_INFORMATION

  • FILE_ATTRIBUTE_TAG_INFORMATION

  • FILE_BASIC_INFORMATION

  • FILE_COMPRESSION_INFORMATION

  • FILE_EA_INFORMATION

  • FILE_INTERNAL_INFORMATION

  • FILE_NAME_INFORMATION

  • FILE_NETWORK_OPEN_INFORMATION

  • FILE_POSITION_INFORMATION

  • FILE_STANDARD_INFORMATION

  • FILE_STREAM_INFORMATION

  • FILE_LINKS_INFORMATION

  • 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 ZwQueryInformationFile. Routine.

  • Irp->UserBuffer è un puntatore facoltativo a un buffer di output fornito dal chiamante in cui il contenuto di Irp-AssociatedIrp.SystemBuffer> viene copiato durante il completamento di I/O dal gestore di I/O. I driver non usano questo buffer per restituire dati per la richiesta.

  • 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_QUERY_INFORMATION e non deve essere usato.

  • IrpSp->MajorFunction è impostato su IRP_MJ_QUERY_INFORMATION.

  • IrpSp->Parameters.QueryFile.FileInformationClass è il tipo di informazioni sui file su cui eseguire query. Questo membro può essere uno dei valori seguenti.

    Valore Significato
    FileAllInformation Restituisce una struttura FILE_ALL_INFORMATION per il file.
    FileAttributeTagInformation Restituisce una struttura FILE_ATTRIBUTE_TAG_INFORMATION per il file.
    FileBasicInformation Restituisce una struttura FILE_BASIC_INFORMATION per il file.
    FileCompressionInformation Restituisce una struttura FILE_COMPRESSION_INFORMATION per il file.
    FileEaInformation Restituisce una struttura FILE_EA_INFORMATION per il file.
    FileInternalInformation Restituisce una struttura FILE_INTERNAL_INFORMATION per il file.
    FileNameInformation Restituisce una struttura FILE_NAME_INFORMATION per il file.
    FileNetworkOpenInformation Restituisce una singola struttura FILE_NETWORK_OPEN_INFORMATION per il file.
    FilePositionInformation Restituisce una singola struttura FILE_POSITION_INFORMATION per il file.
    FileStandardInformation Restituisce una singola struttura FILE_STANDARD_INFORMATION per il file.
    FileStreamInformation Restituisce una singola struttura FILE_STREAM_INFORMATION per il file.
    FileHardLinkInformation Restituisce una struttura FILE_LINKS_INFORMATION per il file.
  • IrpSp->Parameters.QueryFile.Length è la lunghezza, espressa in byte, del buffer a cui punta Irp-AssociatedIrp.SystemBuffer>.

Commenti

Gestione I/O memorizza sempre nel buffer l'operazione di IRP_MJ_QUERY_INFORMATION. Gestione I/O alloca dalla memoria del pool non di paging l'Irp-AssociatedIrp.SystemBuffer> usato per restituire le informazioni sul file o sulla directory richieste. Di conseguenza, Irp-AssociatedIrp.SystemBuffer> restituito dal sistema operativo è sempre un indirizzo valido per la lunghezza specificata in IrpSp-Parameters.QueryFile.Length>.

Irp-AssociatedIrp.UserBuffer> viene usato internamente dal gestore di I/O e non deve essere usato dai driver di filtro del file system o del file system.

Vedi anche

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile