Funzione FltDoCompletionProcessingWhenSafe (fltkernel.h)
Se è possibile farlo, la funzione FltDoCompletionProcessingWhenSafe esegue una routine di callback del driver minifiltro.
Sintassi
BOOLEAN FLTAPI FltDoCompletionProcessingWhenSafe(
[in] PFLT_CALLBACK_DATA Data,
[in] PCFLT_RELATED_OBJECTS FltObjects,
[in, optional] PVOID CompletionContext,
[in] FLT_POST_OPERATION_FLAGS Flags,
[in] PFLT_POST_OPERATION_CALLBACK SafePostCallback,
[out] PFLT_POSTOP_CALLBACK_STATUS RetPostOperationStatus
);
Parametri
[in] Data
Puntatore alla struttura dei dati di callback (FLT_CALLBACK_DATA) per l'operazione di I/O. In genere si tratta dello stesso puntatore data passato alla routine di callback di postoperazione (PFLT_POST_OPERATION_CALLBACK) che ha chiamato FltDoCompletionProcessingWhenSafe.
[in] FltObjects
Puntatore alla struttura di oggetti correlati (FLT_RELATED_OBJECTS) per l'operazione di I/O. In genere si tratta dello stesso FltObjects puntatore passato alla routine di callback di postoperazione che ha chiamato FltDoCompletionProcessingWhenSafe.
[in, optional] CompletionContext
Puntatore a informazioni sul contesto fornite dal chiamante che verranno passate alla funzione di callback specificata nel parametro SafePostCallback.
[in] Flags
Maschera di bit di flag che specificano come verrà eseguita l'elaborazione del completamento. In genere si tratta dello stesso valore flag passato alla routine di callback di postoperazione che ha chiamato FltDoCompletionProcessingWhenSafe. Per altre informazioni, vedere la sezione Osservazioni seguente.
[in] SafePostCallback
Puntatore a un chiamante fornito PFLT_POST_OPERATION_CALLBACKroutine di callback tipizzata che il sistema operativo chiama quando è sicuro farlo.
[out] RetPostOperationStatus
Variabile allocata dal chiamante che riceve il valore di stato finale per l'operazione di I/O. Per altre informazioni sulla modalità di impostazione di questo parametro, vedere la sezione Osservazioni seguente.
Valore restituito
FltDoCompletionProcessingWhenSafe restituisce TRUE se l'elaborazione del completamento per l'operazione di I/O può essere eseguita immediatamente o l'operazione di I/O è stata registrata correttamente in un thread di lavoro; in caso contrario, restituisce FALSE.
Osservazioni
FltDoCompletionProcessingWhenSafe esegue il SafePostCallback immediatamente se il chiamante è in esecuzione in IRQL <= APC_LEVEL. In caso contrario, se è sicuro pubblicare l'operazione in un thread di lavoro, l'elaborazione SafePostCallback viene posticipata fino a quando non può essere chiamata in un contesto di thread in cui IRQL <= APC_LEVEL.
Se irQL < DISPATCH_LEVEL:
- FltDoCompletionProcessingWhenSafe chiama immediatamente la routine di callback SafePostCallback.
- Il parametro RetPostOperationStatus riceve un valore di FLT_POSTOP_CALLBACK_STATUS restituito da SafePostCallback.
- FltDoCompletionProcessingWhenSafe restituisce TRUE.
Se IRQL >= DISPATCH_LEVEL:
- FltDoCompletionProcessingWhenSafe tenta di pubblicare l'operazione di I/O in un thread di lavoro e quindi chiamare la routine SafePostCallback dal thread di lavoro.
- Se l'operazione di I/O potrebbe essere registrata in modo sicuro:
- Gestione filtri imposta RetPostOperationStatus su FLT_POSTOP_MORE_PROCESSING_REQUIRED.
- FltDoCompletionProcessingWhenSafe restituisce TRUE.
- Se l'operazione di I/O non può essere registrata in modo sicuro:
- Gestione filtri imposta RetPostOperationStatus su FLT_POSTOP_FINISHED_PROCESSING.
- FltDoCompletionProcessingWhenSafe restituisce FALSE.
FltDoCompletionProcessingWhenSafe può essere chiamato solo per le operazioni basate su IRP. Per determinare se l'operazione è un'operazione basata su IRP, utilizzare la macro FLT_IS_IRP_OPERATION.
FltDoCompletionProcessingWhenSafe non può essere usato per post-completamento di un'operazione di I/O di paging in un thread di lavoro.
FltDoCompletionProcessingWhenSafe può essere chiamato solo dalla routine di callback di postperazione di un driver minifiltro (PFLT_POST_OPERATION_CALLBACK). Si noti che FltDoCompletionProcessingWhenSafe non deve mai essere chiamato se il parametro Flags del callback di postoperazione ha il FLTFL_POST_OPERATION_DRAINING bit impostato.
Se un minifiltro chiama FltDoCompletionProcessingWhenSafe e il SafePostCallback viene richiamato in un thread di lavoro perché non è sicuro richiamarlo nel contesto del thread corrente, il gestore filtri riprenderà l'elaborazione del completamento purché il minifiltro non restituisca FLT_POSTOP_MORE_PROCESSING_REQUIRED dal SafePostCallback.
Se il minifiltro restituisce FLT_POSTOP_MORE_PROCESSING_REQUIRED dal SafePostCallback, il minifiltro deve chiamare FltCompletePendedPostOperation per riprendere l'elaborazione del completamento.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile in Microsoft Windows 2000 Update Rollup 1 per SP4, Windows XP SP2, Windows Server 2003 SP1 e sistemi operativi successivi. Non disponibile nei sistemi operativi Windows 2000 SP4 e versioni precedenti. |
piattaforma di destinazione | Universale |
intestazione | fltkernel.h (include Fltkernel.h) |
libreria | Fltmgr.lib |
IRQL | Qualunque. |