Funzione FsRtlNotifyFullChangeDirectory (ntifs.h)

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

Sintassi

void FsRtlNotifyFullChangeDirectory(
  [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
);

Parametri

[in] NotifySync

Puntatore a un oggetto di sincronizzazione opaco per l'elenco delle notifiche per il volume corrente.

[in] NotifyList

Puntatore all'intestazione di un elenco di notifiche. 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 sottodirectory che devono causare il completamento della coda dei runtime di integrazione in sospeso. 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 completare alla modifica della notifica. Se NotifyIrp è NULL, significa che il flusso di file rappresentato da questo oggetto file 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. FsRtlNotifyFullChangeDirectory rilascia il contesto e libera la struttura dopo l'uso. Ignorato se NotifyIrp è NULL. Se viene specificata una routine TraverseCallback , SubjectContext viene passato come parametro SubjectContext a tale routine.

Valore restituito

nessuno

Osservazioni

FsRtlNotifyFullChangeDirectory viene chiamato da un file system che ha ricevuto una richiesta di modifica di notifica. Questa richiesta viene ricevuta come IRP con codice di funzione principale IRP_MJ_DIRECTORY_CONTROL, codice di funzione secondario IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Se NotifyIrp è NULL, FsRtlNotifyFullChangeDirectory controlla se l'elenco delle notifiche contiene un IRP in sospeso che fa riferimento a questo oggetto file e, in tal caso, lo completa con STATUS_DELETE_PENDING.

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

  • Controlla se l'oggetto file è stato sottoposto a pulizia. In tal caso, FsRtlNotifyFullChangeDirectory completa la notifica IRP con stato STATUS_NOTIFY_CLEANUP.

  • Se l'oggetto file non è stato sottoposto a pulizia, FsRtlNotifyFullChangeDirectory controlla se l'elenco delle notifiche per questo volume contiene già una struttura di notifica per questa modifica. In tal caso, FsRtlNotifyFullChangeDirectory completa tutti i runtime di integrazione in sospeso. In caso contrario, FsRtlNotifyFullChangeDirectory contrassegna la notifica IRP come in sospeso, crea una struttura di notifica e la inserisce nell'elenco.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione ntifs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT