FltReissueSynchronousIo, fonction (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
Pointeur d’instance opaque vers l’instance de pilote minifilter qui réédite l’opération d’E/S. Doit être la même instance que celle 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 des données de rappel (FLT_CALLBACK_DATA) à partir 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
Aucun
Remarques
Un pilote minifilter appelle FltReissueSynchronousIo à partir d’une routine de rappel de postopération (PFLT_POST_OPERATION_CALLBACK) pour réémettre une requête d’E/S synchronisée. Il appelle généralement FltReissueSynchronousIo d’une routine de rappel postopératoire pour réécrire 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éémettre des E/S que le pilote minifilter généré par le biais d’appels aux routines FltAllocateCallbackData et FltPerformSynchronousIo. Dans ce cas, il n’est pas important qu’il appelle FltReissueSynchronousIo dans une routine de rappel postopératoire 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 de postopération, envisagez d’utiliser les routines FltReuseCallbackData et FltPerformSynchronousIo à la place.
L’appelant peut modifier le contenu des données de rappel (FLT_CALLBACK_DATA) du bloc de paramètres d’E/S de la structure avant de réémettre la requête d’E/S. Si c’est le cas, il doit appeler FltSetCallbackDataDirty avant d’appeler FltReissueSynchronousIo.
Par exemple, si un pilote minifilter utilise des points d’analyse et que sa routine de rappel post-création est appelée pour une opération de création retournée STATUS_REPARSE, le pilote minifilter peut réécrire l’opération de création pour ses propres points d’analyse. Dans ce cas, le pilote minifilter 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éémettre la demande de création.
Le Gestionnaire de filtre envoie la demande d’E/S réédition uniquement aux instances de pilote minifilter attachées sous l’instance de lancement (spécifiée dans le paramètre InitialingInstance) et au système de fichiers. Les instances de pilote Minifilter attachées au-dessus de l’instance de lancement ne reçoivent pas la demande d’E/S réédition.
Seules les opérations d’E/S synchronisées peuvent être rééditées. Pour fournir au pilote la possibilité de réédition, en appelant FltReissueSynchronousIo dans la routine de rappel de postopération, un pilote minifilter doit spécifiquement retourner FLT_PREOP_SYNCHRONIZE dans la routine de rappel de préopération.
Note
Le pilote minifilter 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 minifilter 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 vérifier le Flags membre de l’objet de fichier 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) est é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éédition avec STATUS_CANCELLED.
Note
Lorsque les pilotes minifilter réexéquent 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.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Correctif cumulatif Windows 2000 pour SP4 ; Windows XP SP2 |
serveur minimum pris en charge | Windows Server 2003 SP1 |
plateforme cible | Universel |
d’en-tête | fltkernel.h (include 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’à PASSIVE_LEVEL) |