Partager via


FltDoCompletionProcessingWhenSafe, fonction (fltkernel.h)

S’il est sûr de le faire, la fonction FltDoCompletionProcessingWhenSafe exécute une routine de rappel post-opération du pilote minifilter.

Syntaxe

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

Paramètres

[in] Data

Pointeur vers la structure de données de rappel (FLT_CALLBACK_DATA) pour l’opération d’E/S. En règle générale, il s’agit du pointeur Data qui a été passé à la routine de rappel postopératoire (PFLT_POST_OPERATION_CALLBACK) appelée FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Pointeur vers la structure d’objets connexes (FLT_RELATED_OBJECTS) pour l’opération d’E/S. Il s’agit généralement de la même chose que le pointeur FltObjects passé à la routine de rappel de postopération qui a appelé FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Pointeur vers des informations de contexte fournies par l’appelant qui seront transmises à la fonction de rappel spécifiée dans le paramètre SafePostCallback.

[in] Flags

Masque de bits des indicateurs qui spécifient la façon dont le traitement d’achèvement sera effectué. Il s’agit généralement de la même valeur Flags qui a été passée à la routine de rappel de postopération qui a appelé FltDoCompletionProcessingWhenSafe. Pour plus d’informations, consultez la section Remarques suivante.

[in] SafePostCallback

Pointeur vers une routine de rappel PFLT_POST_OPERATION_CALLBACK-typée fournie par l’appelant que le système d’exploitation appelle lorsqu’il est sûr de le faire.

[out] RetPostOperationStatus

Variable allouée par l’appelant qui reçoit la valeur d’état finale pour l’opération d’E/S. Pour plus d’informations sur la façon dont ce paramètre est défini, consultez la section Remarques suivante.

Valeur de retour

FltDoCompletionProcessingWhenSafe retourne TRUE si le traitement d’achèvement de l’opération d’E/S peut être effectué immédiatement ou que l’opération d’E/S a été correctement publiée sur un thread de travail ; sinon, elle retourne FALSE.

Remarques

FltDoCompletionProcessingWhenSafe exécute immédiatement le SafePostCallback si l’appelant s’exécute à IRQL <= APC_LEVEL. Sinon, s’il est sûr de publier l’opération sur un thread de travail, le traitement SafePostCallback est différé jusqu’à ce qu’il puisse être appelé dans un contexte de thread où IRQL <= APC_LEVEL.

Si IRQL < DISPATCH_LEVEL :

  • FltDoCompletionProcessingWhenSafe appelle immédiatement la routine de rappel SafePostCallback.
  • Le paramètre RetPostOperationStatus reçoit une valeur FLT_POSTOP_CALLBACK_STATUS retournée par SafePostCallback.
  • FltDoCompletionProcessingWhenSafe retourne TRUE.

Si IRQL >= DISPATCH_LEVEL :

  • FltDoCompletionProcessingWhenSafe tente de publier l’opération d’E/S sur un thread de travail, puis appelez la routine SafePostCallback à partir du thread de travail.
  • Si l’opération d’E/S peut être publiée en toute sécurité :
    • Le gestionnaire de filtres définit RetPostOperationStatus sur FLT_POSTOP_MORE_PROCESSING_REQUIRED.
    • FltDoCompletionProcessingWhenSafe retourne TRUE.
  • Si l’opération d’E/S n’a pas pu être publiée en toute sécurité :
    • Le gestionnaire de filtres définit RetPostOperationStatus sur FLT_POSTOP_FINISHED_PROCESSING.
    • FltDoCompletionProcessingWhenSafe retourne FAUX.

FltDoCompletionProcessingWhenSafe ne peut être appelé que pour les opérations basées sur IRP. Pour déterminer si l’opération est une opération basée sur IRP, utilisez la macro FLT_IS_IRP_OPERATION.

FltDoCompletionProcessingWhenSafe ne peut pas être utilisé pour publier l’achèvement d’une opération d’E/S de pagination sur un thread de travail.

FltDoCompletionProcessingWhenSafe ne peut être appelé qu’à partir d’une routine de rappel postopératoire du pilote minifilter (PFLT_POST_OPERATION_CALLBACK). Notez que FltDoCompletionProcessingWhenSafe ne doit jamais être appelée si le paramètre Flags du rappel de postopération a le jeu de bits FLTFL_POST_OPERATION_DRAINING.

Si un minifilter appelle FltDoCompletionProcessingWhenSafe et que le SafePostCallback est appelé dans un thread de travail, car il n’est pas sûr de l’appeler dans le contexte de thread actuel, le gestionnaire de filtre reprend le traitement de l’achèvement tant que le minifilter ne retourne pas FLT_POSTOP_MORE_PROCESSING_REQUIRED à partir du SafePostCallback.

Si le minifilter retourne FLT_POSTOP_MORE_PROCESSING_REQUIRED à partir du SafePostCallback, le minifilter doit appeler FltCompletePendedPostOperation pour reprendre le traitement de l’achèvement.

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans le correctif cumulatif 1 de Microsoft Windows 2000 pour SP4, Windows XP SP2, Windows Server 2003 SP1 et versions ultérieures. Non disponible dans les systèmes d’exploitation Windows 2000 SP4 et versions antérieures.
plateforme cible Universel
d’en-tête fltkernel.h (include Fltkernel.h)
bibliothèque Fltmgr.lib
IRQL Quelconque.

Voir aussi

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK