Fonction FltReissueSynchronousIo (fltkernel.h)
FltReissueSynchronousIo lance une nouvelle opération d’E/S synchrone qui utilise les paramètres d’une opération d’E/S précédemment synchronisée.
Syntaxe
VOID FLTAPI FltReissueSynchronousIo(
[in] PFLT_INSTANCE InitiatingInstance,
[in] PFLT_CALLBACK_DATA CallbackData
);
Paramètres
[in] InitiatingInstance
Un pointeur de instance opaque vers le pilote minifiltre instance qui réédite l’opération d’E/S. Doit être le même instance qui a lancé l’opération d’E/S précédente. Ce paramètre est obligatoire et ne peut pas être défini sur NULL.
[in] CallbackData
Pointeur vers la structure de données de rappel (FLT_CALLBACK_DATA) d’une opération d’E/S précédemment synchronisée. Ce paramètre est obligatoire et ne peut pas être défini sur NULL.
Valeur de retour
None
Remarques
Un pilote de minifiltre appelle FltReissueSynchronousIo à partir d’une routine de rappel post-opération (PFLT_POST_OPERATION_CALLBACK) pour rééditer une demande d’E/S synchronisée. Il appelle généralement FltReissueSynchronousIo à partir d’une routine de rappel post-opération pour rééditer une opération ayant échoué avec différents paramètres, ou pour gérer un rebond d’analyse. Toutefois, il peut également appeler FltReissueSynchronousIo pour rééditer les E/S générées par le pilote de minifiltre par le biais d’appels aux routines FltAllocateCallbackData et FltPerformSynchronousIo . Dans ce cas, peu importe s’il appelle FltReissueSynchronousIo dans une routine de rappel post-opération ou en dehors du contexte d’une routine de rappel d’opération. Pour les appels en dehors du contexte d’une routine de rappel post-opération, envisagez plutôt d’utiliser les routines FltReuseCallbackData et FltPerformSynchronousIo .
L’appelant peut modifier le contenu du bloc de paramètres d’E/S de la structure de rappel (FLT_CALLBACK_DATA) avant de rééditer la demande d’E/S. Si c’est le cas, il doit appeler FltSetCallbackDataDirty avant d’appeler FltReissueSynchronousIo.
Par exemple, si un pilote de minifiltre utilise des points d’analyse et que sa routine de rappel post-création est appelée pour une opération de création qui a retourné STATUS_REPARSE, le pilote de minifiltre peut rééditer l’opération de création pour ses propres points d’analyse. Dans ce cas, le pilote de minifiltre effectue les étapes suivantes :
Définissez l’indicateur FILE_OPEN_REPARSE_POINT dans le bloc de paramètres d’E/S de la structure de rappel.
Appelez FltSetCallbackDataDirty.
Appelez FltReissueSynchronousIo pour rééditer la demande de création.
Le Gestionnaire de filtres envoie la demande d’E/S rééditée uniquement aux instances de pilote de minifiltre attachées sous le instance de lancement (spécifié dans le paramètre InitiatingInstance) et au système de fichiers. Les instances de pilote minifiltre attachées au-dessus de la instance de lancement ne reçoivent pas la demande d’E/S rééditée.
Seules les opérations d’E/S synchronisées peuvent être rééditées. Pour permettre au pilote de rééditer, en appelant FltReissueSynchronousIo dans la routine de rappel post-opération, un pilote de minifiltre doit spécifiquement retourner FLT_PREOP_SYNCHRONIZE dans la routine de rappel de préopération.
Notes
Le pilote de minifiltre n’appelle pas la routine FltIsOperationSynchronous pour déterminer si la routine de rappel de préopération pour cette opération a retourné FLT_PREOP_SYNCHRONIZE. Le pilote de minifiltre appelle FltIsOperationSynchronous pour déterminer si l’opération elle-même est synchrone du point de vue du gestionnaire d’E/S.
Seules les opérations d’E/S basées sur IRP peuvent être rééditées. Les opérations d’E/S rapides et les opérations de rappel de filtre de système de fichiers (FSFilter) ne peuvent pas être rééditées. Pour déterminer si une opération d’E/S est basée sur IRP, utilisez la macro FLT_IS_IRP_OPERATION .
Une opération de création (IRP_MJ_CREATE) qui a été annulée ne peut pas être rééditée. Avant d’appeler FltReissueSynchronousIo pour une opération de création, les appelants doivent case activée le membre Flags de l’objet file pour l’opération de création. Si l’indicateur FO_FILE_OPEN_CANCELLED est défini, cela signifie que l’opération de création a été annulée et qu’une opération de fermeture (IRP_MJ_CLOSE) sera émise pour cet objet de fichier. Si FltReissueSynchronousIo est appelé pour une opération de création qui a été annulée, le Gestionnaire de filtres échoue à la demande d’E/S rééditée avec STATUS_CANCELLED.
Notes
Lorsque les pilotes de minifiltre émettent à nouveau la création dans le rappel post-création, ils n’ont pas besoin de libérer et de définir la mémoire tampon associée à leur point d’analyse (champ TagData dans CallbackData) sur NULL. Au lieu de cela, le Gestionnaire de filtres libère et définit la mémoire tampon sur NULL pour eux.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Correctif cumulatif Windows 2000 1 pour SP4 ; Windows XP SP2 |
Serveur minimal pris en charge | Windows Server 2003 SP1 |
Plateforme cible | Universal |
En-tête | fltkernel.h (inclure FltKernel.h) |
Bibliothèque | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL (les E/S non paginées ne peuvent être rééditées qu’au PASSIVE_LEVEL) |