Funzione FsRtlNotifyFilterChangeDirectory (ntifs.h)

La routine FsRtlNotifyFilterChangeDirectory crea una struttura di notifica per una richiesta di IRP_MN_NOTIFY_CHANGE_DIRECTORY e la aggiunge all'elenco di notifiche specificato.

Sintassi

void FsRtlNotifyFilterChangeDirectory(
  [in]           PNOTIFY_SYNC               NotifySync,
  [in]           PLIST_ENTRY                NotifyList,
  [in]           PVOID                      FsContext,
  [in]           PSTRING                    FullDirectoryName,
  [in]           BOOLEAN                    WatchTree,
  [in]           BOOLEAN                    IgnoreBuffer,
  [in]           ULONG                      CompletionFilter,
  [in, optional] PIRP                       NotifyIrp,
  [in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
  [in, optional] PSECURITY_SUBJECT_CONTEXT  SubjectContext,
  [in, optional] PFILTER_REPORT_CHANGE      FilterCallback
);

Parametri

[in] NotifySync

Puntatore a un oggetto di sincronizzazione opaco per l'elenco di notifiche della directory di modifica a cui punta il parametro NotifyList .

[in] NotifyList

Puntatore all'intestazione dell'elenco di notifiche della directory di modifica per il volume corrente. Ogni elemento nell'elenco è una struttura di notifica opaca.

[in] FsContext

Puntatore a un valore univoco assegnato dal file system per identificare la struttura di notifica da creare come appartenente a un determinato oggetto file. Se viene fornita una routine TraverseCallback , FsContext viene passato come parametro NotifyContext a tale routine.

[in] FullDirectoryName

Puntatore a una stringa ANSI o Unicode contenente il nome completo per la directory associata a questa struttura di notifica. Ignorato se NotifyIrp è NULL.

[in] WatchTree

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. Ignorato se NotifyIrp è NULL.

[in] IgnoreBuffer

Impostare su TRUE per ignorare tutti i buffer utente e forzare la directory da rinumerare. Questa azione accelera l'operazione. Ignorato se NotifyIrp è NULL.

[in] CompletionFilter

Maschera di bit di flag che specificano i tipi di modifiche ai file o alle directory che devono causare il completamento dell'elenco di notifiche. I valori di flag possibili sono descritti di seguito.

Flag Significato
FILE_NOTIFY_CHANGE_FILE_NAME Un file è stato aggiunto, eliminato o rinominato in questa directory.
FILE_NOTIFY_CHANGE_DIR_NAME È stata creata, rimossa o rinominata una sottodirectory.
FILE_NOTIFY_CHANGE_NAME Il nome della directory è cambiato.
FILE_NOTIFY_CHANGE_ATTRIBUTES Il valore di un attributo di questo file, ad esempio l'ultima volta di accesso, è stato modificato.
FILE_NOTIFY_CHANGE_SIZE Le dimensioni del file sono state modificate.
FILE_NOTIFY_CHANGE_LAST_WRITE L'ultima modifica del file è stata modificata.
FILE_NOTIFY_CHANGE_LAST_ACCESS L'ultima volta di accesso al file è stata modificata.
FILE_NOTIFY_CHANGE_CREATION Il tempo di creazione del file è cambiato.
FILE_NOTIFY_CHANGE_EA Sono stati modificati gli attributi estesi del file.
FILE_NOTIFY_CHANGE_SECURITY Le informazioni di sicurezza del file sono state modificate.
FILE_NOTIFY_CHANGE_STREAM_NAME Un flusso di file è stato aggiunto, eliminato o rinominato in questa directory.
FILE_NOTIFY_CHANGE_STREAM_SIZE Le dimensioni del flusso di file sono state modificate.
FILE_NOTIFY_CHANGE_STREAM_WRITE I dati del flusso di file sono stati modificati.
 

CompletamentoFilter viene ignorato se NotifyIrp è NULL.

[in, optional] NotifyIrp

Puntatore all'IRP da aggiungere all'elenco di notifiche. Se NotifyIrp è NULL, questo significa che il flusso di file rappresentato dall'oggetto file (identificato dal parametro FsContext ) viene eliminato.

[in, optional] TraverseCallback

Puntatore facoltativo a una routine di callback da richiamare quando si verifica una modifica in una sottodirectory guardato in un albero di directory. In questo modo, il file system verifica se il watcher ha accesso a tale directory. Tale routine fornita dal chiamante viene dichiarata come segue:

NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID TargetContext,                     // Context pointer
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
    );

Per altre informazioni sul parametro TargetContext , vedere il parametro TargetContext di FsRtlNotifyFullReportChange. TraverseCallback viene ignorato se NotifyIrp è NULL.

[in, optional] SubjectContext

Puntatore a una struttura di contesto da passare a TraverseCallback. FsRtlNotifyFilterChangeDirectory rilascia il contesto e libera la struttura dopo l'uso. Ignorato se NotifyIrp è NULL. Se viene fornita una routine TraverseCallback , SubjectContext viene passato come parametro SubjectContext a tale routine.

[in, optional] FilterCallback

Puntatore facoltativo a una routine di callback da richiamare quando si verifica una modifica alla directory. Se questa routine di callback restituisce TRUE, FsRtlNotifyFilterReportChange completa le richieste di IRP_MN_NOTIFY_CHANGE_DIRECTORY in sospeso nell'elenco di notifiche; in caso contrario, non lo fa. Tale routine fornita dal chiamante viene dichiarata come segue:

BOOLEAN
(*PFILTER_REPORT_CHANGE) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID FilterContext                      // Context pointer
    );

Valore restituito

nessuno

Osservazioni

FsRtlNotifyFilterChangeDirectory viene chiamato da un file system che ha ricevuto un'IRP con codice di funzione principale IRP_MJ_DIRECTORY_CONTROL, codice di funzione secondario IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Il file system chiama FsRtlNotifyFilterChangeDirectory per creare una struttura di notifica per contenere l'IRP e aggiungere la struttura di notifica all'elenco di notifica per il volume corrente.

Se NotifyIrp è NULL, FsRtlNotifyFilterChangeDirectory verifica se l'elenco di notifiche contiene già eventuali irP in sospeso i cui oggetti file corrispondono al valore fsContext specificato e, in tal caso, completa i provider di integrazione con STATUS_DELETE_PENDING.

Se NotifyIrp non è NULL, FsRtlNotifyFilterChangeDirectory esegue le operazioni seguenti:

  • Verifica se l'oggetto file di IRP ha eseguito la pulizia. In tal caso , FsRtlNotifyFilterChangeDirectory completa l'IRP con stato STATUS_NOTIFY_CLEANUP e non lo aggiunge all'elenco di notifiche.
  • Se l'oggetto file IRP non ha eseguito la pulizia, FsRtlNotifyFilterChangeDirectory verifica se l'elenco di notifica contiene già una struttura di notifica per il valore fsContext specificato. Se tale struttura di notifica viene trovata e sono state apportate modifiche in sospeso al report, FsRtlNotifyFilterChangeDirectory completa NotifyIrp. Se viene trovata una struttura di notifica, ma non sono state apportate modifiche in sospeso al report, FsRtlNotifyFilterChangeDirectory contrassegna l'IRP puntato da NotifyIrp come in sospeso e lo inserisce nell'elenco degli IRP di notifica nella struttura di notifica. Se non viene trovata alcuna struttura di notifica, FsRtlNotifyFilterChangeDirectory contrassegna l'IRP indicato da NotifyIrp come in sospeso, crea una struttura di notifica e la inserisce nell'elenco di notifiche.
Quando si verifica una modifica alla directory, il file system chiama FsRtlNotifyFilterReportChange per completare le richieste di IRP_MN_NOTIFY_CHANGE_DIRECTORY in sospeso nell'elenco di notifiche.

Requisiti

   
Client minimo supportato Aggiornamento cumulativo di Windows 2000 SP4; Windows XP
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL < APC_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

FsRtlNotifyFilterReportChange

FsRtlNotifyFullChangeDirectory

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT