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.
Quando si verifica una modifica alla directory, il file system chiama FsRtlNotifyFilterReportChange per completare le operazioni di IRP_MN_NOTIFY_CHANGE_DIRECTORY in sospeso nell'elenco di notifiche.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (includere Fltkernel.h)
Libreria FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Vedi anche

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK