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 di notifiche della directory di modifica a cui punta il parametro NotifyList .
[in, out] NotifyList
Puntatore all'intestazione dell'elenco di notifiche della directory di modifica 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 fornita 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 contenente il nome completo per la directory associata a questa struttura di notifica.
[in] WatchTree
Impostare su TRUE se devono essere visualizzate anche tutte le sottodirectory della directory specificata dal parametro FullDirectoryName . Impostare su FALSE se solo la directory stessa deve essere osservata.
[in] IgnoreBuffer
Impostare su TRUE per ignorare tutti i buffer utente e forzare la directory da rinumerare. Questa azione accelera l'operazione.
[in] CompletionFilter
Maschera di bit di flag che specificano i tipi di modifiche ai file o alle directory che devono causare il completamento delle strutture dei dati di callback nell'elenco di notifica. I valori del flag possibili sono descritti nella tabella seguente.
Contrassegno | 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 è cambiato. |
FILE_NOTIFY_CHANGE_ATTRIBUTES | Il valore di un attributo di questo file, ad esempio l'ultima volta di accesso, è stato modificato. |
FILE_NOTIFY_CHANGE_SIZE | Le dimensioni del file sono state modificate. |
FILE_NOTIFY_CHANGE_LAST_WRITE | L'ultima modifica del file è stata modificata. |
FILE_NOTIFY_CHANGE_LAST_ACCESS | L'ultima volta di accesso al file è stata modificata. |
FILE_NOTIFY_CHANGE_CREATION | Il tempo di creazione del file è cambiato. |
FILE_NOTIFY_CHANGE_EA | Sono stati modificati gli attributi estesi del file. |
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 state modificate. |
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 osservata in un albero di directory. Questo puntatore consente al file system di controllare se il watcher ha eseguito l'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 fornita 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 di 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 della directory di modifica. Queste operazioni hanno un codice di 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:
- Verifica se l'oggetto file dell'operazione è stato pulito. In tal caso, FltNotifyFilterChangeDirectory completa l'operazione con stato STATUS_NOTIFY_CLEANUP e non la aggiunge all'elenco di notifiche.
- Se l'oggetto file dell'operazione non è stato pulito, FltNotifyFilterChangeDirectory verifica se l'elenco di notifica contiene già una struttura di notifica per il valore fsContext specificato. Se tale struttura di notifica viene trovata e vengono apportate modifiche in sospeso al report, FltNotifyFilterChangeDirectory completa la struttura dei dati di callback a cui fa riferimento 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, FltNotifyFilterChangeDirectory crea una struttura di notifica per l'operazione e la inserisce nell'elenco.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Intestazione | fltkernel.h (includere Fltkernel.h) |
Libreria | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |