PFLT_INSTANCE_TEARDOWN_CALLBACK funzione di callback (fltkernel.h)
Un driver minifilter può registrare due routine di tipo PFLT_INSTANCE_TEARDOWN_CALLBACK come routine del driver minifilter IstanzaTeardownStartCallback e InstanceTeardownCompleteCallback.
Sintassi
PFLT_INSTANCE_TEARDOWN_CALLBACK PfltInstanceTeardownCallback;
void PfltInstanceTeardownCallback(
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in] FLT_INSTANCE_TEARDOWN_FLAGS Reason
)
{...}
Parametri
[in] FltObjects
Puntatore a una struttura FLT_RELATED_OBJECTS contenente puntatori opachi per gli oggetti correlati all'operazione di I/O corrente.
[in] Reason
Contrassegno che indica perché l'istanza del driver minifilter viene distrutta. I tipi validi sono:
Contrassegno | Significato |
---|---|
FLTFL_INSTANCE_TEARDOWN_MANUAL (0x00000001) | L'istanza viene scollegata perché un'applicazione in modalità utente ha chiamato FilterDetach o un componente in modalità kernel ha chiamato FltDetachVolume. |
FLTFL_INSTANCE_TEARDOWN_FILTER_UNLOAD (0x00000002) | Il driver minifilter viene scaricato. |
FLTFL_INSTANCE_TEARDOWN_MANDATORY_FILTER_UNLOAD (0x00000004) | Il driver minifilter viene scaricato. |
FLTFL_INSTANCE_TEARDOWN_VOLUME_DISMOUNT (0x00000008) | Se impostato, il volume viene smontato. Oppure il volume è già stato smontato. Oppure l'operazione di montaggio del volume non è riuscita. Oppure l'istanza del driver minifilter o il volume viene eliminato. Oppure il file system non è stato registrato come file system attivo. |
FLTFL_INSTANCE_TEARDOWN_INTERNAL_ERROR (0x00000010) | Il sistema ha riscontrato un errore interno imprevisto. |
Valore restituito
nessuno
Osservazioni
Quando un driver minifilter si registra chiamando FltRegisterFilter dalla routine DriverEntry , può registrare due routine di tipo PFLT_INSTANCE_TEARDOWN_CALLBACK come routine del driver minifiltro InstanceTeardownStartCallback eInstanceTeardownCompleteCallback . Per registrare queste routine di callback, il driver minifilter archivia gli indirizzi delle due routine di tipo PFLT_INSTANCE_TEARDOWN_CALLBACK nell'IstanzaTeardownStartCallback e InstanceTeardownCompleteCallback dei membri della FLT_REGISTRATION struttura che il driver minifilter passa come parametro Di registrazione di FltRegisterFilter.
Le routine InstanceTeardownStartCallback e InstanceTeardownCompleteCallback sono facoltative e possono essere NULL. Se il driver minifilter specifica NULL per la routine InstanceTeardownStartCallback o InstanceTeardownCompleteCallback, l'istanza è ancora inattiva.
La routine InstanceTeardownStartCallback viene chiamata quando il gestore filtri inizia a rimuovere un'istanza del driver minifilter per consentire al driver minifilter di completare le operazioni di I/O con penna e salvare le informazioni sullo stato.
La routine InstanceTeardownStartCallback deve:
- Chiamare FltCompletePendedPreOperation per ogni operazione di I/O usata nella routine di callback di preoperazione del driver minifilter per completare l'operazione o restituire il controllo dell'operazione alla gestione filtri.
- Non è stata creata alcuna nuova operazione di I/O. Se il driver minifilter usa una coda di dati di callback, deve chiamare FltCbdqDisable per disabilitarlo .
- Chiamare FltCompletePendedPostOperation per ogni operazione di I/O usata nella routine di callback postoperazione del driver minifilter per restituire il controllo dell'operazione al gestore filtri.
La routine InstanceTeardownStartCallback può facoltativamente eseguire le operazioni seguenti per consentire al driver minifilter di scaricare il più rapidamente possibile:
- Chiudere tutti i file aperti.
- Assicurarsi che i thread di lavoro eseguano solo il minimo necessario per completare l'elaborazione degli elementi di lavoro in sospeso.
- Chiamare FltCancelIo per annullare tutte le operazioni di I/O avviate dal driver minifilter.
- Arrestare l'accodamento di nuovi elementi di lavoro.
Dopo aver chiamato la routine InstanceTeardownStartCallback del driver minifilter, le routine di preoperazione e postoperazione del driver minifilter non vengono chiamate per le nuove operazioni di I/O. Tuttavia, possono essere chiamati per le operazioni di I/O avviate prima dell'avvio dell'istanza.
La routine InstanceTeardownCompleteCallback viene chiamata quando il processo di disinstallazione viene completato per consentire al driver minifilter di chiudere i file aperti ed eseguire qualsiasi altra elaborazione di pulizia necessaria.
La routine InstanceTeardownCompleteCallback deve chiudere tutti i file aperti dal driver minifilter.
Il gestore filtri chiama la routine InstanceTeardownCompleteCallback del driver minifilter solo dopo che tutte le operazioni di I/O in sospeso sono state completate o esaurite.
Avviso
La routine InstanceTeardownCompleteCallback non verrà chiamata se una delle condizioni seguenti è true:
- Esistono operazioni di I/O in sospeso.
- Esistono operazioni di I/O in sospeso avviate dal driver minifilter.
Se l'istanza del driver minifilter viene disattivata perché il driver minifilter viene scaricato, l'operazione di scaricamento viene visualizzata fino a quando non viene restituita la routine InstanceTeardownCompleteCallback . Per eseguire il debug di questi tipi di problemi, è necessario abilitare il driver di verifica del driver nel driver minifilter. L'opzione Verifica I /O filtro può aiutare a identificare le possibili cause, ad esempio riferimenti non rilasciati, che impedirebbero lo scaricamento del driver minifilter. Per altre informazioni, vedere Filtro verifica.
Si noti che facendo riferimento all'istanza (chiamando FltObjectReference) non impedisce che venga chiamata la routine InstanceTeardownCompleteCallback .
Gestione filtri chiama le routine InstanceTeardownStartCallback e InstanceTeardownCompleteCallback in IRQL PASSIVE_LEVEL.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Desktop |
Intestazione | fltkernel.h (includere Fltkernel.h) |
IRQL | Vedere La sezione Osservazioni. |
Vedi anche
FltCompletePendedPostOperation