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 :
- PFLT_POST_OPERATION_CALLBACK
- PFLT_PRE_OPERATION_CALLBACK
- PFLT_COMPLETED_ASYNC_IO_CALLBACK
- PFLT_GENERATE_FILE_NAME
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_PARAMETERS pour IRP_MJ_ACQUIRE_FOR_MOD_WRITE
- FLT_PARAMETERS pour IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS pour IRP_MJ_CREATE
- FLT_PARAMETERS pour IRP_MJ_CREATE_MAILSLOT
- FLT_PARAMETERS pour IRP_MJ_CREATE_NAMED_PIPE
- FLT_PARAMETERS pour IRP_MJ_DEVICE_CONTROL
- FLT_PARAMETERS pour IRP_MJ_DIRECTORY_CONTROL
- FLT_PARAMETERS pour IRP_MJ_FAST_IO_CHECK_IF_POSSIBLE
- FLT_PARAMETERS pour IRP_MJ_FILE_SYSTEM_CONTROL
- FLT_PARAMETERS pour IRP_MJ_INTERNAL_DEVICE_CONTROL
- FLT_PARAMETERS pour IRP_MJ_LOCK_CONTROL
- FLT_PARAMETERS pour IRP_MJ_MDL_READ
- FLT_PARAMETERS pour IRP_MJ_MDL_READ_COMPLETE
- FLT_PARAMETERS pour IRP_MJ_MDL_WRITE_COMPLETE
- FLT_PARAMETERS pour IRP_MJ_NETWORK_QUERY_OPEN
- FLT_PARAMETERS pour IRP_MJ_PNP
- FLT_PARAMETERS pour IRP_MJ_PREPARE_MDL_WRITE
- FLT_PARAMETERS pour IRP_MJ_QUERY_EA
- FLT_PARAMETERS pour IRP_MJ_QUERY_INFORMATION
- FLT_PARAMETERS pour IRP_MJ_QUERY_OPEN
- FLT_PARAMETERS pour IRP_MJ_QUERY_QUOTA
- FLT_PARAMETERS pour IRP_MJ_QUERY_SECURITY
- FLT_PARAMETERS pour IRP_MJ_QUERY_VOLUME_INFORMATION
- FLT_PARAMETERS pour IRP_MJ_READ
- FLT_PARAMETERS pour IRP_MJ_RELEASE_FOR_MOD_WRITE
- FLT_PARAMETERS pour IRP_MJ_RELEASE_FOR_SECTION_SYNCHRONIZATION
- FLT_PARAMETERS pour IRP_MJ_SET_EA
- FLT_PARAMETERS pour IRP_MJ_SET_INFORMATION
- FLT_PARAMETERS pour IRP_MJ_SET_QUOTA
- FLT_PARAMETERS pour IRP_MJ_SET_SECURITY
- FLT_PARAMETERS pour IRP_MJ_SET_VOLUME_INFORMATION
- FLT_PARAMETERS pour IRP_MJ_SYSTEM_CONTROL
- FLT_PARAMETERS pour IRP_MJ_VOLUME_MOUNT
- FLT_PARAMETERS pour IRP_MJ_WRITE