FLT_CALLBACK_DATA structure (fltkernel.h)

La structure FLT_CALLBACK_DATA représente une opération d’E/S. Le Gestionnaire de filtres et les minifiltres utilisent cette structure pour lancer et traiter des opérations d’E/S.

Syntaxe

typedef struct _FLT_CALLBACK_DATA {
  FLT_CALLBACK_DATA_FLAGS     Flags;
  PETHREAD                    Thread;
  PFLT_IO_PARAMETER_BLOCK     Iopb;
  IO_STATUS_BLOCK             IoStatus;
  struct _FLT_TAG_DATA_BUFFER *TagData;
  union {
    struct {
      LIST_ENTRY QueueLinks;
      PVOID      QueueContext[2];
    };
    PVOID FilterContext[4];
  };
  KPROCESSOR_MODE             RequestorMode;
} FLT_CALLBACK_DATA, *PFLT_CALLBACK_DATA;

Membres

Flags

Masque de bits des indicateurs décrivant l’opération d’E/S.

Les minifiltres peuvent définir l’indicateur suivant.

Indicateur Signification
FLTFL_CALLBACK_DATA_DIRTY Un minifiltre définit cet indicateur (en appelant FltSetCallbackDataDirty) pour indiquer qu’il a modifié le contenu de la structure de données de rappel. (Pour plus d’informations, consultez la section Remarques suivante.)

Notes

Seul le Gestionnaire de filtres peut définir les indicateurs suivants.

Lorsque le Gestionnaire de filtres initialise la structure de données de rappel, il définit l’un des indicateurs suivants pour spécifier le type d’opération d’E/S que représente la structure de données de rappel.

Indicateur Signification
FLTFL_CALLBACK_DATA_FAST_IO_OPERATION La structure de données de rappel représente une opération d’E/S rapide.
FLTFL_CALLBACK_DATA_FS_FILTER_OPERATION La structure de données de rappel représente une opération de rappel de minifiltre du système de fichiers.
FLTFL_CALLBACK_DATA_IRP_OPERATION La structure de données de rappel représente une opération basée sur un paquet de demandes d’E/S (IRP).

Notes

Seul le Gestionnaire de filtres peut définir les indicateurs suivants.

Lorsque le Gestionnaire de filtres initialise la structure de données de rappel, il peut également définir les indicateurs suivants.

Indicateur Signification
FLTFL_CALLBACK_DATA_GENERATED_IO La structure de données de rappel représente une opération d’E/S générée par un minifiltre. Cet indicateur est valide uniquement pour les opérations basées sur IRP.
FLTFL_CALLBACK_DATA_REISSUED_IO La structure de données de rappel représente une opération d’E/S qui est rééditée par un minifiltre. (Pour réémettre une opération d’E/S, un minifiltre appelle FltReissueSynchronousIo.) Cet indicateur est valide uniquement pour les opérations basées sur IRP.
FLTFL_CALLBACK_DATA_SYSTEM_BUFFER La mémoire tampon pour l’opération d’E/S a été allouée à partir d’un pool non paginé. Cet indicateur peut être défini pour n’importe quel type d’opération d’E/S. Les minifiltres ne doivent jamais définir cet indicateur.

Notes

Seul le Gestionnaire de filtres peut définir les indicateurs suivants.

Lorsque le Gestionnaire de filtres effectue le traitement d’achèvement pour l’opération d’E/S que représente la structure de données de rappel, il définit l’un des indicateurs suivants, ou les deux.

Indicateur Signification
FLTFL_CALLBACK_DATA_DRAINING_IO Le Gestionnaire de filtres définit cet indicateur pour indiquer qu’il est en train de vider le nœud d’achèvement pour l’opération d’E/S. Cet indicateur est valide uniquement pendant la fin des E/S.
FLTFL_CALLBACK_DATA_POST_OPERATION Le Gestionnaire de filtres définit cet indicateur pour indiquer qu’il appelle actuellement des routines de rappel post-opération (PFLT_POST_OPERATION_CALLBACK) inscrites pour l’opération. Cet indicateur est valide uniquement pendant la fin des E/S.

Thread

Pointeur vers le thread qui a lancé l’opération d’E/S. Ce champ peut être NULL.

Iopb

Pointeur vers une structure FLT_IO_PARAMETER_BLOCK qui contient les paramètres de l’opération d’E/S.

IoStatus

Structure IO_STATUS_BLOCK qui contient status et des informations pour l’opération d’E/S. Un minifiltre peut modifier le contenu de cette structure uniquement dans une routine de rappel pré-opération (PFLT_PRE_OPERATION_CALLBACK) à partir de laquelle il est sur le point de retourner FLT_PREOP_COMPLETE ou dans une routine de rappel post-opération (PFLT_POST_OPERATION_CALLBACK) à partir de laquelle il est sur le point de retourner FLT_POSTOP_FINISHED_PROCESSING. Sinon, le contenu de cette structure est normalement défini par le Gestionnaire de filtres.

TagData

Pointeur vers une structure FLT_TAG_DATA_BUFFER qui contient des données de point d’analyse pour l’opération d’E/S. Ce pointeur est valide uniquement dans le chemin d’accès post-création. Ainsi, seule la routine de rappel post-opération d’un minifiltre peut modifier la valeur de ce membre. La routine de rappel post-création d’un minifiltre peut modifier ce membre pour qu’il pointe vers une structure de FLT_TAG_DATA_BUFFER différente. Toutefois, s’il modifie le membre pour qu’il pointe vers une autre structure, il doit d’abord appeler ExFreePool pour libérer la structure existante afin d’éviter une fuite de mémoire de pool.

QueueLinks

Liens de file d’attente qu’un minifiltre peut utiliser lorsque la file d’attente de données de rappel du Gestionnaire de filtres est utilisée pour mettre en attente l’opération d’E/S.

QueueContext[2]

Tableau de pointeurs d’informations de contexte qu’un minifiltre peut utiliser lorsque la file d’attente du Gestionnaire de filtres est utilisée pour mettre en attente l’opération d’E/S.

FilterContext[4]

Tableau de pointeurs d’informations de contexte qu’un minifiltre peut utiliser lorsqu’une file d’attente autre que celle du Gestionnaire de filtres est utilisée pour mettre en attente l’opération d’E/S.

RequestorMode

Indique le mode d’exécution du processus qui a lancé l’opération d’E/S, KernelMode ou UserMode.

Remarques

Un minifiltre enregistre des routines de rappel pré-opération (PFLT_PRE_OPERATION_CALLBACK) et post-opération (PFLT_POST_OPERATION_CALLBACK) pour un ou plusieurs types d’opérations d’E/S. Lorsque le Gestionnaire de filtres appelle l’une de ces routines de rappel, il transmet une structure de données de rappel (FLT_CALLBACK_DATA) comme premier paramètre. Cette structure représente l’opération d’E/S.

La routine de rappel de pré-opération ou post-opération d’un minifiltre peut modifier le contenu de la structure de données de rappel, à l’exception des membres Thread et RequestorMode . Si c’est le cas, il doit ensuite appeler FltSetCallbackDataDirty, sauf s’il a également modifié le contenu du membre IoStatus . Sinon, les valeurs modifiées sont ignorées.

Un minifiltre peut lancer une opération d’E/S en appelant une routine de support comme FltReadFile ou en appelant FltAllocateCallbackData pour allouer une structure de données de rappel ; initialisation des paramètres d’E/S de la structure et transmission de la structure à FltPerformSynchronousIo ou FltPerformAsynchronousIo.

Une opération d’E/S initiée par un minifiltre est envoyée uniquement aux instances de minifiltre attachées sous la instance appelante et au système de fichiers. Les minifiltres attachés au-dessus de la instance spécifiée ne reçoivent pas l’opération d’E/S.

Les minifiltres peuvent uniquement lancer des opérations d’E/S basées sur IRP. Ils ne peuvent pas lancer d’opérations de rappel rapides d’E/S ou de filtre de système de fichiers (FSFilter).

Configuration requise

Condition requise Valeur
En-tête fltkernel.h (inclure Fltkernel.h)

Voir aussi

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_IS_REISSUED_IO

FLT_IS_SYSTEM_BUFFER

FLT_REGISTRATION

FLT_RELATED_OBJECTS

FLT_TAG_DATA_BUFFER

FltAllocateCallbackData

FltFreeCallbackData

FltPerformAsynchronousIo

FltPerformSynchronousIo

FltReadFile

FltReissueSynchronousIo

FltReuseCallbackData

FltSetCallbackDataDirty

IO_STACK_LOCATION

IO_STATUS_BLOCK

IRP

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK