Partager via


structure FLT_IO_PARAMETER_BLOCK (fltkernel.h)

La structure FLT_IO_PARAMETER_BLOCK contient les paramètres de l’opération d’E/S représentée par une structure de données de rappel FLT_CALLBACK_DATA.

Syntaxe

typedef struct _FLT_IO_PARAMETER_BLOCK {
  ULONG          IrpFlags;
  UCHAR          MajorFunction;
  UCHAR          MinorFunction;
  UCHAR          OperationFlags;
  UCHAR          Reserved;
  PFILE_OBJECT   TargetFileObject;
  PFLT_INSTANCE  TargetInstance;
  FLT_PARAMETERS Parameters;
} FLT_IO_PARAMETER_BLOCK, *PFLT_IO_PARAMETER_BLOCK;

Membres

IrpFlags

Masque de bits des indicateurs qui spécifient différents aspects de l’opération d’E/S. Ces indicateurs sont utilisés uniquement pour les opérations basées sur IRP. Le tableau suivant présente les valeurs d’indicateur.

Valeur Signification
IRP_BUFFERED_IO L’opération est une opération d’E/S mise en mémoire tampon.
IRP_CLOSE_OPERATION L’opération est une opération de nettoyage ou de fermeture.
IRP_DEALLOCATE_BUFFER Le Gestionnaire d’E/S libère la mémoire tampon pendant la phase d’achèvement de l’IRP.
IRP_INPUT_OPERATION L’opération est une opération d’entrée.
IRP_NOCACHE L’opération est une opération d’E/S non mise en cache.
IRP_PAGING_IO L’opération est une opération d’E/S de pagination.
IRP_SYNCHRONOUS_API L’opération d’E/S est synchrone.
IRP_SYNCHRONOUS_PAGING_IO L’opération est une opération d’E/S de pagination synchrone.
IRP_MOUNT_COMPLETION Un montage de volume est terminé pour l’opération.
IRP_CREATE_OPERATION L’opération est une opération de création ou d’ouverture.
IRP_READ_OPERATION L’opération d’E/S est destinée à la lecture.
IRP_WRITE_OPERATION L’opération d’E/S est destinée à l’écriture.
IRP_DEFER_IO_COMPLETION L’achèvement des E/S de l’opération est différé.
IRP_ASSOCIATED_IRP L’opération est associée à un IRP maître.
IRP_OB_QUERY_NAME L’opération est une requête de nom asynchrone.
IRP_HOLD_DEVICE_QUEUE Réservé.
IRP_UM_DRIVER_INITIATED_IO L’opération provient d’un pilote en mode utilisateur.

MajorFunction

Code de fonction principal pour l’opération d’E/S. Les codes de fonction principaux sont utilisés pour les opérations basées sur IRP, les opérations d’E/S rapides et les opérations de rappel FSFilter (File System). Pour plus d’informations sur les opérations supplémentaires, consultez FLT_PARAMETERS.

MinorFunction

Code de fonction secondaire pour l’opération d’E/S. Ce membre est facultatif et peut être NULL. La valeur du membre MajorFunction détermine les valeurs possibles. Pour plus d’informations sur les codes de fonction mineurs, consultez FLT_PARAMETERS.

OperationFlags

Masque de bits des indicateurs qui spécifient différents aspects de l’opération d’E/S. Ces indicateurs sont utilisés uniquement pour les opérations basées sur IRP. Le Gestionnaire de filtre copie ces indicateurs à partir des indicateurs de membre de la structure IO_STACK_LOCATION associée au IRP. Le tableau suivant présente les valeurs d’indicateur les plus couramment utilisées.

Valeur Signification
SL_CASE_SENSITIVE Utilisé pour IRP_MJ_CREATE. Si cet indicateur est défini, les comparaisons de noms de fichiers doivent respecter la casse.
SL_EXCLUSIVE_LOCK Utilisé pour IRP_MJ_LOCK_CONTROL. Si cet indicateur est défini, un verrou de plage d’octets exclusif est demandé. Sinon, un verrou partagé est demandé.
SL_FAIL_IMMEDIATELY Utilisé pour IRP_MJ_LOCK_CONTROL. Si cet indicateur est défini, la demande de verrouillage doit échouer si elle ne peut pas être accordée immédiatement.
SL_FORCE_ACCESS_CHECK Utilisé pour IRP_MJ_CREATE. Si cet indicateur est défini, les vérifications d’accès doivent être effectuées même si la valeur du membre RequestorMode d’IRP est KernelMode.
SL_FORCE_DIRECT_WRITE Utilisé pour IRP_MJ_WRITE et IOCTL_DISK_COPY_DATA. Si cet indicateur est défini, les pilotes en mode noyau peuvent écrire dans des zones de volume auxquelles ils sont normalement bloqués pour l’écriture en raison de raisons de sécurité. Cet indicateur est vérifié à la fois au niveau de la couche système de fichiers et de la couche de pile de stockage. L’indicateur SL_FORCE_DIRECT_WRITE est disponible dans Windows Vista et les versions ultérieures de Windows.
SL_INDEX_SPECIFIED Utilisé pour IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAet IRP_MJ_SET_QUOTA. Si cet indicateur est défini, l’analyse des informations d’annuaire, de quota ou d’attribut étendu doit commencer à l’entrée de la liste dont l’index est spécifié.
SL_OPEN_PAGING_FILE Utilisé pour IRP_MJ_CREATE. Si cet indicateur est défini, le fichier est un fichier de pagination.
SL_OPEN_TARGET_DIRECTORY Utilisé pour IRP_MJ_CREATE. Si cet indicateur est défini, le répertoire parent du fichier doit être ouvert.
SL_OVERRIDE_VERIFY_VOLUME Utilisé pour IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_READet IRP_MJ_WRITE. Si cet indicateur est défini, l’opération d’E/S doit être effectuée même si l’indicateur de DO_VERIFY_VOLUME est défini sur l’objet d’appareil du volume.
SL_RESTART_SCAN Utilisé pour IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAet IRP_MJ_SET_QUOTA. Si cet indicateur est défini, l’analyse des informations d’annuaire, de quota ou d’attribut étendu doit commencer à la première entrée du répertoire ou de la liste. Sinon, l’analyse doit être reprise à partir de l’analyse précédente.
SL_RETURN_SINGLE_ENTRY Utilisé pour IRP_MJ_DIRECTORY_CONTROL, IRP_MJ_QUERY_EAet IRP_MJ_SET_QUOTA. Si cet indicateur est défini, l’analyse des informations d’annuaire, de quota ou d’attribut étendu doit retourner uniquement la première entrée trouvée.
SL_WATCH_TREE Utilisé pour IRP_MJ_DIRECTORY_CONTROL. Si cet indicateur est défini, tous les sous-répertoires de ce répertoire doivent également être surveillés. Sinon, seul le répertoire lui-même doit être regardé.
SL_WRITE_THROUGH Utilisé pour IRP_MJ_WRITE. Si cet indicateur est défini, les données de fichier doivent être écrites dans un stockage persistant, pas seulement dans le cache.

Reserved

Réservé à l’utilisation du système. N’utilisez pas.

TargetFileObject

Pointeur d’objet de fichier pour le fichier ou le répertoire qui est la cible de cette opération d’E/S.

TargetInstance

Pointeur d’instance opaque pour le minifilter qui est la cible pour cette opération d’E/S.

Parameters

Structure FLT_PARAMETERS qui contient les paramètres de l’opération d’E/S spécifiées par les membres MajorFunction et MinorFunction.

Remarques

La structure FLT_IO_PARAMETER_BLOCK contient les paramètres de l’opération d’E/S représentée par une structure de données de rappel (FLT_CALLBACK_DATA). La structure de données de rappel contient un pointeur vers la structure FLT_IO_PARAMETER_BLOCK dans son membre Iopb.

Un minifilter reçoit un pointeur vers la structure de données de rappel en tant que Data ou CallbackData paramètre d’entrée vers les types de routine de rappel suivants :

Les routines de rappel de préopération et de postopération d’un minifilter peuvent modifier le contenu de la structure de FLT_IO_PARAMETER_BLOCK pour l’opération d’E/S, à l’exception des MajorFunction et membres réservés. Si c’est le cas, elle doit appeler FltSetCallbackDataDirty, sauf si elle a également modifié le membre IoStatus de la structure de données de rappel pour l’opération. Sinon, les valeurs modifiées sont ignorées.

Lorsque filter Manager émet un rappel de préopération ou de post-opération à un minifilter, FltObjects->FileObject et TargetFileObject (CallbackData->Iopb->TargetFileObject) sont initialement identiques. Si un minifilter modifie TargetFileObject ou TargetInstance, son appel ultérieur à FltSetCallbackDataDirty à partir d’un rappel de préopération entraîne le remplacement du Gestionnaire de filtres FltObjects->FileObjects- et FltObjects->Instance avant d’envoyer l’opération à des filtres inférieurs.

Si la routine de rappel de préopération d’un minifilter modifie les paramètres d’une opération d’E/S, tous les minifilters ci-dessous dans la pile d’instances minifilter reçoivent les paramètres modifiés dans leurs routines de rappel de préopération et de postopération.

Les paramètres modifiés ne sont pas reçus par la routine de rappel postopératoire du minifilter, ou par les minifilters ci-dessus dans la pile d’instances minifilter. Dans tous les cas, les routines de rappel de préopération et de postopération d’un minifilter reçoivent les mêmes valeurs de paramètre d’entrée.

Si un minifilter modifie la valeur du membre TargetInstance, la nouvelle valeur doit être un pointeur vers une instance du même minifilter à la même altitude sur un autre volume. En outre, l’objet appareil du nouveau volume doit avoir une taille de pile supérieure ou égale à celle de l’objet d’appareil du volume d’origine.

Pour obtenir la taille de pile d’un objet d’appareil de volume, en fonction d’un pointeur d’instance opaque pour une instance attachée au volume, procédez comme suit :

  • Appelez FltGetVolumeFromInstance pour obtenir le pointeur de volume.
  • Appelez FltGetDeviceObject pour obtenir un pointeur vers l’objet d’appareil de volume. Ce pointeur est retourné dans le paramètre DeviceObject. La taille de la pile de l’objet appareil se trouve dans DeviceObject->StackSize.
  • Lorsque le pointeur de volume n’est plus nécessaire, appelez FltObjectDereference pour décrémenter son nombre de références.
  • Lorsque le pointeur d’objet de périphérique de volume n’est plus nécessaire, appelez ObDereferenceObject pour décrémenter son nombre de références.

Un minifiltre peut modifier la valeur du membre TargetFileObject. Toutefois, la nouvelle valeur doit être un pointeur vers un objet de fichier pour un fichier qui réside sur le même volume que l’instance spécifiée par l’instance TargetInstance membre.

Un minifilter ne peut pas modifier en toute sécurité la valeur du membre MajorFunction. Au lieu de cela, il doit lancer une nouvelle opération d’E/S.

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

Note

Utilisez les routines de support dans la mesure du possible lors du lancement d’opérations d’E/S. Un minifilter doit allouer ses propres données de rappel uniquement s’il n’existe aucune fonction de prise en charge pour une opération d’E/S particulière.

Exigences

Exigence Valeur
d’en-tête fltkernel.h (include Fltkernel.h)

Voir aussi

FLT_CALLBACK_DATA

FLT_IS_IRP_OPERATION

FltAllocateCallbackData

FltClearCallbackDataDirty

FltDecodeParameters

FltIsCallbackDataDirty

FltReadFile

FltSetCallbackDataDirty

IO_STACK_LOCATION

IRP

FLT_PARAMETERS

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_SHUTDOWN

PFLT_COMPLETED_ASYNC_IO_CALLBACK

PFLT_GENERATE_FILE_NAME

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK