Funzione FsRtlNotifyFilterChangeDirectory (ntifs.h)

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 delle modifiche a cui punta il parametro NotifyList .

[in] NotifyList

Puntatore all'intestazione dell'elenco delle notifiche della directory delle modifiche 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 oggetto file specifico. 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 devono essere osservate anche tutte le sottodirectory di questa directory. Impostare su FALSE se è necessario controllare solo la directory stessa. Ignorato se NotifyIrp è NULL.

[in] IgnoreBuffer

Impostare su TRUE per ignorare eventuali buffer utente e forzare la riesenumerazione della directory. Questa azione accelera l'operazione. Ignorato se NotifyIrp è NULL.

[in] CompletionFilter

Maschera di bit di flag che specificano i tipi di modifiche apportate ai file o alle directory che devono causare il completamento degli INDIRIZZI di integrazione nell'elenco delle notifiche. Nella tabella seguente vengono descritti i possibili valori di flag.

Contrassegno Significato
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) Un file è stato aggiunto, eliminato o rinominato in questa directory.
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) È stata creata, rimossa o rinominata una sottodirectory.
FILE_NOTIFY_CHANGE_NAME (0x0003) Il nome di questa directory è stato modificato.
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) Il valore di un attributo di questo file, ad esempio l'ora dell'ultimo accesso, è stato modificato.
FILE_NOTIFY_CHANGE_SIZE (0x0008) Le dimensioni del file sono cambiate.
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) L'ora dell'ultima modifica del file è cambiata.
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) L'ora dell'ultimo accesso del file è stata modificata.
FILE_NOTIFY_CHANGE_CREATION (0x0040) L'ora di creazione del file è cambiata.
FILE_NOTIFY_CHANGE_EA (0x0080) Gli attributi estesi di questo file sono stati modificati.
FILE_NOTIFY_CHANGE_SECURITY (0x0100) Le informazioni di sicurezza del file sono state modificate.
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) Un flusso di file è stato aggiunto, eliminato o rinominato in questa directory.
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) Le dimensioni del flusso di file sono cambiate.
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) I dati del flusso di file sono stati modificati.

CompletionFilter viene ignorato se NotifyIrp è NULL.

[in, optional] NotifyIrp

Puntatore all'IRP da aggiungere all'elenco delle notifiche. Se NotifyIrp è NULL, 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 sottoposta a controllo 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 SECURITY_SUBJECT_CONTEXT da passare a TraverseCallback. FsRtlNotifyFilterChangeDirectory rilascia il contesto e libera la struttura dopo averlo usato. Questo parametro viene ignorato se NotifyIrp è NULL. Se viene specificata 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 delle 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 delle notifiche per il volume corrente.

Se NotifyIrp è NULL, FsRtlNotifyFilterChangeDirectory controlla se l'elenco delle notifiche contiene già eventuali IRP in sospeso i cui oggetti file corrispondono al valore FsContext specificato e, in tal caso, completa i runtime di integrazione con STATUS_DELETE_PENDING.

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

  • Verifica se l'oggetto file di IRP è stato sottoposto a pulizia. In tal caso, FsRtlNotifyFilterChangeDirectory completa l'IRP con stato STATUS_NOTIFY_CLEANUP e non lo aggiunge all'elenco delle notifiche.

  • Se l'oggetto file di IRP non è stato sottoposto a pulizia, FsRtlNotifyFilterChangeDirectory controlla se l'elenco di notifiche contiene già una struttura di notifica per il valore FsContext specificato. Se viene trovata una struttura di notifica di questo tipo e vengono apportate modifiche in sospeso al report, FsRtlNotifyFilterChangeDirectory completa NotifyIrp. Se viene trovata una struttura di notifica, ma non sono presenti modifiche in sospeso per il report, FsRtlNotifyFilterChangeDirectory contrassegna l'IRP a cui notifyIrp fa riferimento come in sospeso e lo inserisce nell'elenco dei provider di integrazione di notifica nella struttura di notifica. Se non viene trovata alcuna struttura di notifica di questo tipo, FsRtlNotifyFilterChangeDirectory contrassegna l'IRP a cui fa riferimento NotifyIrp come in sospeso, crea una struttura di notifica e la inserisce nell'elenco delle 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 delle notifiche.

Requisiti

Requisito Valore
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