Condividi tramite


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.

Vedere anche

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK