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) |