Partager via


Fonction FltDoCompletionProcessingWhenSafe (fltkernel.h)

Si vous pouvez le faire en toute sécurité, la fonction FltDoCompletionProcessingWhenSafe exécute une routine de rappel post-opération du pilote minifiltre.

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. Il s’agit généralement du pointeur de données qui a été passé à la routine de rappel post-opération (PFLT_POST_OPERATION_CALLBACK) qui a appelé FltDoCompletionProcessingWhenSafe.

[in] FltObjects

Pointeur vers la structure d’objets associée (FLT_RELATED_OBJECTS) pour l’opération d’E/S. Généralement, il s’agit du pointeur FltObjects qui a été passé à la routine de rappel post-opération qui a appelé FltDoCompletionProcessingWhenSafe.

[in, optional] CompletionContext

Pointeur vers les 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 d’indicateurs qui spécifient la façon dont le traitement d’achèvement sera effectué. Il s’agit généralement de la valeur Flags qui a été passée à la routine de rappel post-opération qui a appelé FltDoCompletionProcessingWhenSafe. Pour plus d'informations, consultez la section Notes qui suit.

[in] SafePostCallback

Pointeur vers une routine de rappel de type PFLT_POST_OPERATION_CALLBACK fournie par l’appelant que le système d’exploitation appelle en toute sécurité.

[out] RetPostOperationStatus

Variable allouée par l’appelant qui reçoit la valeur status 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 retournée

FltDoCompletionProcessingWhenSafe retourne TRUE si le traitement de fin de l’opération d’E/S peut être effectué immédiatement ou si l’opération d’E/S a été correctement publiée dans un thread worker ; sinon, il retourne FALSE.

Remarques

FltDoCompletionProcessingWhenSafe exécute le SafePostCallback immédiatement si l’appelant est en cours d’exécution à IRQL <= APC_LEVEL. Sinon, s’il est possible 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 worker, puis d’appeler la routine SafePostCallback à partir du thread worker.
  • 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 FALSE.

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

FltDoCompletionProcessingWhenSafe ne peut être appelé qu’à partir de la routine de rappel post-opération d’un pilote minifiltre (PFLT_POST_OPERATION_CALLBACK). Notez que FltDoCompletionProcessingWhenSafe ne doit jamais être appelé si le paramètre Flags du rappel de post-opération a le FLTFL_POST_OPERATION_DRAINING bit défini.

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

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans microsoft Windows 2000 Update Rollup 1 pour les systèmes d’exploitation SP4, Windows XP SP2, Windows Server 2003 SP1 et ultérieurs. Non disponible dans les systèmes d’exploitation Windows 2000 SP4 et antérieurs.
Plateforme cible Universal
En-tête fltkernel.h (inclure Fltkernel.h)
Bibliothèque Fltmgr.lib
IRQL Tout.

Voir aussi

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FLT_RELATED_OBJECTS

FltCancelIo

FltCompletePendedPostOperation

PFLT_POST_OPERATION_CALLBACK