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'inizio 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 specificata una routine TraverseCallback, FsContext viene passato come parametro NotifyContext a tale routine.
[in] FullDirectoryName
Puntatore a una stringa ANSI o Unicode che contiene 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 deve essere osservata solo la directory stessa. Ignorato se NotifyIrp è NULL.
[in] IgnoreBuffer
Impostare su TRUE per ignorare eventuali buffer utente e forzare la reinnumerazione della directory. Questa azione velocizza 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 di indirizzi DI runtime di notifica in sospeso. Nella tabella seguente vengono descritti i possibili valori di flag.
Bandiera | 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 della 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 del 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 controlla 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
[in, optional] SubjectContext
Puntatore a una struttura di 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
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 funzione principale IRP_MJ_DIRECTORY_CONTROL, codice di funzione secondario IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Se notifyIrp è NULL, FsRtlNotifyFullChangeDirectory verifica 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 l'IRP di notifica come in sospeso, crea una struttura di notifica e la inserisce nell'elenco.
Fabbisogno
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) |