Condividi tramite


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.
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 delle notifiche.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione fltkernel.h (include Fltkernel.h)
libreria FltMgr.lib
dll Fltmgr.sys
IRQL <= APC_LEVEL

Vedere anche

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK