Funzione FltDoCompletionProcessingWhenSafe (fltkernel.h)

Se è possibile farlo, la funzione FltDoCompletionProcessingWhenSafe esegue una routine di callback post-operazione del driver minifilter.

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 post-operazione (PFLT_POST_OPERATION_CALLBACK) che ha chiamato FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Puntatore alla struttura degli oggetti correlati (FLT_RELATED_OBJECTS) per l'operazione di I/O. In genere si tratta dello stesso puntatore FltObjects passato alla routine di callback di postperazione che ha chiamato FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Puntatore a informazioni di contesto fornite dal chiamante che verranno passate alla funzione di callback specificata nel parametro SafePostCallback .

[in] Flags

Maschera di bit di flag che specificano la modalità di esecuzione dell'elaborazione del completamento. In genere si tratta dello stesso valore di Flags passato alla routine di callback di post-operazione che ha chiamato FltDoCompletionProcessingWhenSafe. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] SafePostCallback

Puntatore a una routine di callback tipizzata PFLT_POST_OPERATION_CALLBACK fornita dal chiamante 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 sull'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.

Commenti

FltDoCompletionProcessingWhenSafe esegue immediatamente SafePostCallback 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 FLT_POSTOP_CALLBACK_STATUS restituito da SafePostCallback.
  • FltDoCompletionProcessingWhenSafe restituisce TRUE.

Se IRQL >= DISPATCH_LEVEL:

  • FltDoCompletionProcessingWhenSafe tenta di inviare l'operazione di I/O a 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 è stata 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 postoperazione di un driver minifilter (PFLT_POST_OPERATION_CALLBACK). Si noti che FltDoCompletionProcessingWhenSafe non deve mai essere chiamato se il parametro Flags del callback di postoperation ha il FLTFL_POST_OPERATION_DRAINING bit impostato.

Se un minifilter chiama FltDoCompletionProcessingWhenSafe e 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 minifilter non restituisca FLT_POSTOP_MORE_PROCESSING_REQUIRED da SafePostCallback.

Se il minifilter restituisce FLT_POSTOP_MORE_PROCESSING_REQUIRED da SafePostCallback, il minifilter deve chiamare FltCompletePendedPostOperation per riprendere l'elaborazione del completamento.

Requisiti

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 Qualsiasi.

Vedi anche

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK