Partager via


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 :

  1. Définissez l’indicateur FILE_OPEN_REPARSE_POINT dans le bloc de paramètres d’E/S de la structure de rappel.

  2. Appelez FltSetCallbackDataDirty.

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

Voir aussi

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_PARAMETERS pour IRP_MJ_CREATE

FltCancelFileOpen

FltIsOperationSynchronous

FltPerformSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK