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