IRP_MJ_DIRECTORY_CONTROL (driver FS e filtro)

Data di invio

Gestione I/O, altri componenti del sistema operativo e altri driver in modalità kernel inviano richieste di IRP_MJ_DIRECTORY_CONTROL. Può essere inviato, ad esempio, quando un'applicazione in modalità utente ha chiamato una funzione Win32, ad esempio ReadDirectoryChangesW o FindNextVolumeMountPoint o quando un componente in modalità kernel ha chiamato ZwQueryDirectoryFile o ZwQueryDirectoryFileEx.

Operazione: Driver di file system

Il driver del file system deve controllare il codice di funzione secondario per determinare quale operazione di controllo directory è richiesta. Di seguito sono riportati i codici di funzione secondari validi:

Codice Descrizione
IRP_MN_QUERY_DIRECTORY Indica una richiesta di query della directory. I tipi di informazioni che possono essere sottoposti a query sono dipendenti dal file system, ma in genere includono i valori seguenti: FileBothDirectoryInformation, FileDirectoryInformation, FileFullDirectoryInformation, FileIdBothDirectoryInformation, FileIdFullDirectoryInformation, FileNamesInformation, FileObjectIdInformation, FileReparsePointInformation.
IRP_MN_NOTIFY_CHANGE_DIRECTORY Indica una richiesta di notifica delle modifiche apportate alla directory. In genere, invece di soddisfare immediatamente questa richiesta, il driver del file system contiene l'IRP in una coda privata. Quando si verifica una modifica alla directory, il driver del file system esegue la notifica e esegue la notifica e completa l'IRP. Il driver del file system restituisce le informazioni in una struttura di FILE_NOTIFY_INFORMATION .
IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX Indica una richiesta di notifica delle modifiche apportate alla directory. In genere, invece di soddisfare immediatamente questa richiesta, il driver del file system contiene l'IRP in una coda privata. Quando si verifica una modifica alla directory, il driver del file system esegue la notifica e esegue la notifica e completa l'IRP. Il driver di file system restituisce informazioni basate sull'IrpSp-Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass> specificato.

Nota

La classe di informazioni FileQuotaInformation è obsoleta. IRP_MJ_QUERY_QUOTA deve essere invece usato.

Il driver del file system deve completare l'IRP dopo aver eseguito l'operazione richiesta.

Operazione: Driver di filtro del file system legacy

Il driver di filtro deve passare l'IRP fino 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 a IRP e IrpSp punta al IO_STACK_LOCATION. Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP per elaborare una richiesta di controllo directory.

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

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

  • Irp->UserBuffer punta a un buffer di output fornito dal chiamante che riceve le informazioni richieste sul contenuto della directory.

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

  • IrpSp->I flag possono essere impostati su uno o più dei valori seguenti per IRP_MN_QUERY_DIRECTORY.

Contrassegno Significato
SL_INDEX_SPECIFIED Iniziare l'analisi nella voce nella directory il cui indice viene specificato da IrpSp-Parameters.QueryDirectory.FileIndex>.
SL_RESTART_SCAN Avviare l'analisi alla prima voce della directory. Se questo flag non è impostato, riprendere l'analisi da una richiesta di IRP_MN_QUERY_DIRECTORY precedente.
SL_RETURN_SINGLE_ENTRY Restituisce solo la prima voce trovata.
SL_RETURN_ON_DISK_ENTRIES_ONLY Indica a tutti i filtri che eseguono la virtualizzazione della directory o l'espansione just-in-time per passare semplicemente la richiesta al file system e restituire le voci attualmente presenti su disco.

Il flag seguente può essere impostato per IRP_MN_NOTIFY_CHANGE_DIRECTORY:

Contrassegno Significato
SL_WATCH_TREE Impostare su TRUE se tutte le sottodirectory di questa directory devono essere visualizzate anche. Impostare su FALSE se solo la directory stessa deve essere osservata.
  • IrpSp->MajorFunction è impostato su IRP_MJ_DIRECTORY_CONTROL.

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

    • IRP_MN_QUERY_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX
  • IrpSp->Parameters.QueryDirectory.FileIndex è l'indice del file in corrispondenza del quale iniziare l'analisi della directory. Questo valore viene ignorato se il flag di SL_INDEX_SPECIFIED non è impostato. Questo parametro non può essere specificato in qualsiasi routine di supporto in modalità kernel o win32. Attualmente viene usato solo dalla macchina DOS virtuale NT (NTVDM), che esiste solo su piattaforme basate su NT a 32 bit. L'indice file non è definito per i file system, ad esempio NTFS, in cui la posizione di un file all'interno della directory padre non è fissa e può essere modificata in qualsiasi momento per mantenere l'ordine di ordinamento.

  • IrpSp->Parameters.QueryDirectory.FileInformationClass è impostato su uno dei valori seguenti.

    Valore Significato
    FileBothDirectoryInformation Restituisce una struttura FILE_BOTH_DIR_INFORMATION per ogni file.
    FileDirectoryInformation Restituisce una struttura FILE_DIRECTORY_INFORMATION per ogni file.
    FileFullDirectoryInformation Restituire una struttura FILE_FULL_DIR_INFORMATION" per ogni file.
    FileIdBothDirectoryInformation Restituire una struttura FILE_ID_BOTH_DIR_INFORMATION per ogni file.
    FileIdFullDirectoryInformation Restituisce una struttura FILE_ID_FULL_DIR_INFORMATION per ogni file.
    FileNamesInformation Restituisce una struttura FILE_NAMES_INFORMATION per ogni file.
    FileObjectIdInformation Restituisce una struttura FILE_OBJECTID_INFORMATION per ogni file.
    FileQuotaInformation Obsoleta. Usare invece IRP_MJ_QUERY_QUOTA .
    FileReparsePointInformation Restituisce una singola struttura FILE_REPARSE_POINT_INFORMATION per la directory.
  • IrpSp->Parameters.QueryDirectory.FileName è il nome facoltativo di un file all'interno della directory specificata.

  • IrpSp->Parameters.QueryDirectory.Length è la lunghezza in byte del buffer a cui fa riferimento Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.Length è la lunghezza in byte del buffer a cui punta Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.CompletionFilter: per altre informazioni, vedere la descrizione del parametro CompletionFilter in FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.Length è la lunghezza in byte del buffer a cui punta Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectoryEx.CompletionFilter: per altre informazioni, vedere la descrizione del parametro CompletionFilter in FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass è uno dei valori seguenti.

    Valore Significato
    DirectoryNotifyInformation Restituisce una struttura FILE_NOTIFY_INFORMATION per la modifica della directory.
    DirectoryNotifyExtendedInformation Restituisce una struttura FILE_NOTIFY_EXTENDED_INFORMATION per ogni modifica della directory.
    DirectoryNotifyFullInformation Restituisce una struttura FILE_NOTIFY_FULL_INFORMATION per ogni modifica della directory.

Vedi anche

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FsRtlNotifyFullChangeDirectory

FILE_NOTIFY_INFORMATION

FILE_NOTIFY_EXTENDED_INFORMATION

FILE_NOTIFY_FULL_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_QUOTA

ZwQueryDirectoryFile

ZwQueryDirectoryFileEx