Macro FsRtlNotifyFullChangeDirectory (rxprocs.h)

La routine FsRtlNotifyFullChangeDirectory crea una struttura di notifica per una richiesta di notifica e la aggiunge all'elenco di notifiche specificato.

Sintassi

void FsRtlNotifyFullChangeDirectory(
   A1,
   A2,
   A3,
   A4,
   A5,
   A6,
   A7,
   A8,
   A9,
   A10
);

Parametri

A1

Puntatore a un oggetto di sincronizzazione opaco per l'elenco delle notifiche per il volume corrente.

A2

Puntatore all'intestazione di un elenco di notifiche. Ogni elemento nell'elenco è una struttura di notifica opaca.

A3

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.

A4

Puntatore a una stringa ANSI o Unicode contenente il nome completo per la directory associata a questa struttura di notifica. Ignorato se NotifyIrp è NULL.

A5

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.

A6

Impostare su TRUE per ignorare eventuali buffer utente e forzare la riesenumerazione della directory. Questa azione accelera l'operazione. Ignorato se NotifyIrp è NULL.

A7

Maschera di bit di flag che specificano i tipi di modifiche apportate ai file o alle sottodirectory che devono causare il completamento della coda dei runtime di integrazione in sospeso. Di seguito sono descritti i possibili valori di flag.

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 di questa 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 di questo 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.

 

CompletionFilter viene ignorato se NotifyIrp è NULL.

A8

Puntatore all'IRP da completare alla modifica della notifica. Se NotifyIrp è NULL, significa che il flusso di file rappresentato da questo oggetto file viene eliminato.

A9

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.

A10

Puntatore a una struttura di contesto da passare a TraverseCallback. FsRtlNotifyFullChangeDirectory rilascia il contesto e libera la struttura dopo l'uso. Ignorato se NotifyIrp è NULL. Se viene specificata una routine TraverseCallback , SubjectContext viene passato come parametro SubjectContext a tale routine.

Valore restituito

nessuno

Osservazioni

FsRtlNotifyFullChangeDirectory viene chiamato da un file system che ha ricevuto una richiesta di modifica di notifica. Questa richiesta viene ricevuta come IRP con codice di funzione principale IRP_MJ_DIRECTORY_CONTROL, codice di funzione secondario IRP_MN_NOTIFY_CHANGE_DIRECTORY.

Se NotifyIrp è NULL, FsRtlNotifyFullChangeDirectory controlla se l'elenco delle notifiche contiene un IRP in sospeso che fa riferimento a questo oggetto file e, in tal caso, lo completa con STATUS_DELETE_PENDING.

Se NotifyIrp non è NULL, FsRtlNotifyFullChangeDirectory esegue le operazioni seguenti:

  • Controlla se l'oggetto file è stato sottoposto a pulizia. In tal caso, FsRtlNotifyFullChangeDirectory completa la notifica IRP con stato STATUS_NOTIFY_CLEANUP.
  • Se l'oggetto file non è stato sottoposto a pulizia, FsRtlNotifyFullChangeDirectory controlla se l'elenco delle notifiche per questo volume contiene già una struttura di notifica per questa modifica. In tal caso, FsRtlNotifyFullChangeDirectory completa tutti i runtime di integrazione in sospeso. In caso contrario, FsRtlNotifyFullChangeDirectory contrassegna la notifica IRP come in sospeso, crea una struttura di notifica e la inserisce nell'elenco.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione rxprocs.h (include Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regole di conformità DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

Vedi anche

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT