Funzione FltNotifyFilterChangeDirectory (fltkernel.h)
La routine FltNotifyFilterChangeDirectory crea una struttura di notifica per un'operazione di IRP_MN_NOTIFY_CHANGE_DIRECTORY e la aggiunge all'elenco di notifiche specificato.
Sintassi
VOID FLTAPI FltNotifyFilterChangeDirectory(
[in, out] PNOTIFY_SYNC NotifySync,
[in, out] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in] PFLT_CALLBACK_DATA NotifyCallbackData,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
Parametri
[in, out] NotifySync
Puntatore a un oggetto di sincronizzazione opaco per l'elenco delle modifiche notifica che il parametro notifyList punta.
[in, out] NotifyList
Puntatore all'inizio 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 chiamante per identificare la struttura di notifica da creare. Se viene specificata una routine di callback nel parametro 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.
[in] WatchTree
Impostare su TRUE se devono essere osservate anche tutte le sottodirectory della directory specificata dal parametro fulldirectoryName. Impostare su false se deve essere osservata solo la directory stessa.
[in] IgnoreBuffer
Impostare su TRUE per ignorare eventuali buffer utente e forzare la reinnumerazione della directory. Questa azione velocizza l'operazione.
[in] CompletionFilter
Maschera di bit di flag che specificano i tipi di modifiche apportate a file o directory che devono causare il completamento delle strutture dei dati di callback nell'elenco delle notifiche. I valori dei flag possibili sono descritti nella tabella seguente.
Bandiera | 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 è stato modificato. |
FILE_NOTIFY_CHANGE_ATTRIBUTES | Il valore di un attributo di questo file, ad esempio l'ora dell'ultimo accesso, è stato modificato. |
FILE_NOTIFY_CHANGE_SIZE | Le dimensioni del file sono cambiate. |
FILE_NOTIFY_CHANGE_LAST_WRITE | L'ora dell'ultima modifica del file è cambiata. |
FILE_NOTIFY_CHANGE_LAST_ACCESS | L'ora dell'ultimo accesso del file è stata modificata. |
FILE_NOTIFY_CHANGE_CREATION | L'ora di creazione del file è cambiata. |
FILE_NOTIFY_CHANGE_EA | Gli attributi estesi del file sono stati modificati. |
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 cambiate. |
FILE_NOTIFY_CHANGE_STREAM_WRITE | I dati del flusso di file sono stati modificati. |
[in] NotifyCallbackData
Puntatore alla struttura dei dati di callback per l'operazione da aggiungere all'elenco di notifiche. Questo parametro è obbligatorio e non può essere NULL.
[in, optional] TraverseCallback
Puntatore facoltativo a una routine di callback da richiamare quando si verifica una modifica in una sottodirectory che viene osservata in un albero di directory. Questo puntatore consente al file system di controllare 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 della routine FsRtlNotifyFullReportChange.
[in, optional] SubjectContext
Puntatore a una struttura di contesto da passare a TraverseCallback. FltNotifyFilterChangeDirectory rilascia il contesto e libera la struttura dopo l'uso. 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 operazioni 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
Un driver minifilter può chiamare FltNotifyFilterChangeDirectory dalla routine di callback di preoperazione (PFLT_PRE_OPERATION_CALLBACK) registrata per elaborare le operazioni di modifica della directory. Queste operazioni hanno un codice funzione principale di IRP_MJ_DIRECTORY_CONTROL e un codice di funzione secondario di IRP_MN_NOTIFY_CHANGE_DIRECTORY.
Il driver minifilter chiama FltNotifyFilterChangeDirectory per creare una struttura di notifica per contenere la struttura dei dati di callback per l'operazione e aggiungere la struttura di notifica all'elenco delle notifiche per il volume corrente.
FltNotifyFilterChangeDirectory esegue le operazioni seguenti:
- Controlla se l'oggetto file dell'operazione è stato pulito. In tal caso, FltNotifyFilterChangeDirectory completa l'operazione con stato STATUS_NOTIFY_CLEANUP e non lo aggiunge all'elenco delle notifiche.
- Se l'oggetto file dell'operazione non è stato pulito, FltNotifyFilterChangeDirectory controlla se l'elenco delle 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, FltNotifyFilterChangeDirectory completa la struttura dei dati di callback a cui punta il parametro NotifyCallbackData. Se viene trovata una struttura di notifica, ma non sono presenti modifiche in sospeso per il report, FltNotifyFilterChangeDirectory aggiunge l'operazione alla struttura di notifica. Se non viene trovata alcuna struttura di notifica di questo tipo, FltNotifyFilterChangeDirectory crea una struttura di notifica per l'operazione e la inserisce nell'elenco.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione | fltkernel.h (include Fltkernel.h) |
libreria | FltMgr.lib |
dll | Fltmgr.sys |
IRQL | <= APC_LEVEL |