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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per