FLT_PARAMETERS pour IRP_MJ_FILE_SYSTEM_CONTROL union
Composant Union utilisé lorsque le champ MajorFunction de la structure FLT_IO_PARAMETER_BLOCK de l’opération est IRP_MJ_FILE_SYSTEM_CONTROL.
Syntaxe
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
} VerifyVolume;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
} FileSystemControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Membres
FileSystemControl : structure contenant les membres suivants.
VerifyVolume : composant Union utilisé pour les opérations de IRP_MN_VERIFY_VOLUME.
Vpb : pointeur vers le bloc de paramètres de volume (VPB) pour le volume à vérifier.
DeviceObject : pointeur vers l’objet d’appareil pour le volume à vérifier.
Courant : composant Union utilisé pour toutes les méthodes de mise en mémoire tampon pour les opérations IRP_MN_KERNEL_CALL et IRP_MN_USER_FS_REQUEST.
Common.OutputBufferLength : longueur, en octets, de la mémoire tampon vers laquelle pointe le membre Neither.OutputBuffer ou Direct.OutputBuffer .
Common.InputBufferLength : longueur, en octets, de la mémoire tampon vers laquelle pointe le membre Neither.InputBuffer, Buffered.SystemBuffer ou Direct.InputSystemBuffer .
Common.FsControlCode : code de fonction FSCTL à passer au système de fichiers, au filtre du système de fichiers ou au pilote de minifiltre pour l’appareil cible.
Pour plus d’informations sur les demandes IOCTL et FSCTL, consultez Utilisation de codes de contrôle d’E/S dans le Guide de l’architecture en mode noyau et « Codes de contrôle d’entrée et de sortie d’appareil » dans la documentation Microsoft Windows SDK. (Cette ressource n’est peut-être pas disponible dans certaines langues et certains pays.)
Ni le composant Union utilisé pour les opérations de IRP_MN_KERNEL_CALL et de IRP_MN_USER_FS_REQUEST lorsque la méthode de mise en mémoire tampon est METHOD_NEITHER. Pour plus d’informations sur les méthodes de mise en mémoire tampon, consultez Définition de codes de contrôle d’E/S.
Neither.InputBuffer : adresse virtuelle en mode utilisateur de la mémoire tampon d’entrée fournie par le demandeur d’origine de l’opération. Le Gestionnaire d’E/S et le Gestionnaire de filtres ne valident pas ces adresses. Pour garantir la validité des adresses d’espace utilisateur, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et MmProbeAndLockPages, en plaçant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Utilisation d’E/S en mémoire tampon ou d’E/S directes et erreurs dans le référencement d’adresses User-Space.
Neither.OutputBuffer : adresse virtuelle en mode utilisateur de la mémoire tampon de sortie fournie par le demandeur d’origine de l’opération. Le Gestionnaire d’E/S et le Gestionnaire de filtres ne valident pas ces adresses. Pour garantir la validité des adresses d’espace utilisateur, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et MmProbeAndLockPages, en plaçant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Utilisation d’E/S en mémoire tampon ou d’E/S directes et erreurs dans le référencement d’adresses User-Space. Neither.OutputBuffer est facultatif et peut avoir la valeur NULL si un MDL est fourni dans Neither.OutputMdlAddress. Consultez Remarques.
Neither.OutputMdlAddress : adresse d’une liste de descripteurs de mémoire (MDL) qui décrit la mémoire tampon vers laquelle pointe le membre Neither.OutputBuffer . Ce membre est facultatif et peut avoir la valeur NULL si une mémoire tampon est fournie dans Neither.OutputBuffer.
Mise en mémoire tampon : composant Union utilisé pour les opérations de IRP_MN_KERNEL_CALL et de IRP_MN_USER_FS_REQUEST lorsque la méthode de mise en mémoire tampon est METHOD_BUFFERED. Pour plus d’informations sur les méthodes de mise en mémoire tampon, consultez Définition de codes de contrôle d’E/S.
Buffered.SystemBuffer : adresse de la mémoire tampon allouée par le système pour l’opération. Dans METHOD_BUFFERED E/S, cette mémoire tampon est utilisée à la fois pour l’entrée et la sortie. Pour plus d’informations, consultez Méthodes d’accès aux mémoires tampons de données.
Direct : composant Union utilisé pour les opérations de IRP_MN_KERNEL_CALL et de IRP_MN_USER_FS_REQUEST lorsque la méthode de mise en mémoire tampon est METHOD_IN_DIRECT ou METHOD_OUT_DIRECT. Pour plus d’informations sur les méthodes de mise en mémoire tampon, consultez Définition de codes de contrôle d’E/S dans le Guide d’architecture en mode noyau.
Direct.InputSystemBuffer : adresse de la mémoire tampon d’entrée pour l’opération. Cette mémoire tampon est verrouillée par le système d’exploitation afin qu’elle soit sécurisée pour l’accès à partir du mode noyau. Pour plus d’informations, consultez Méthodes d’accès aux mémoires tampons de données.
Direct.OutputBuffer : adresse virtuelle en mode utilisateur de la mémoire tampon de sortie fournie par le demandeur d’origine de l’opération. Dans les E/S directes, contrairement à METHOD_NEITHER E/S, le système d’exploitation verrouille cette mémoire tampon afin qu’elle soit accessible en toute sécurité à partir du mode noyau, tant que le minifiltre se trouve dans le même contexte de processus que le demandeur d’origine de l’opération d’E/S. (Sinon, il doit appeler MmGetSystemAddressForMdlSafe pour obtenir l’adresse système du MDL vers lequel pointe le membre OutputMdlAddress .) Pour plus d’informations, consultez Utilisation des E/S directes et erreurs dans les E/S directes.
Direct.OutputMdlAddress : adresse d’une liste de descripteurs de mémoire (MDL) qui décrit la mémoire tampon vers laquelle pointe le membre Direct.OutputBuffer . Ce membre est obligatoire et ne peut pas avoir la valeur NULL.
Remarques
La structure FLT_PARAMETERS pour les opérations de IRP_MJ_FILE_SYSTEM_CONTROL contient les paramètres d’une opération de contrôle de système de fichiers représentée par une structure de données de rappel (FLT_CALLBACK_DATA). Il est contenu dans une structure FLT_IO_PARAMETER_BLOCK .
Si les mémoires tampons Neither.OutputBuffer et Neither.MdlAddress sont fournies, il est recommandé que les minifiltres utilisent le MDL.
Si un minifiltre modifie la valeur de Neither.MdlAddress, après son rappel post-opération, Filter Manager libère le MDL actuellement stocké dans Neither.MdlAddress et restaure la valeur précédente de Neither.MdlAddress.
IRP_MJ_FILE_SYSTEM_CONTROL est une opération basée sur IRP.
Configuration requise
Type d’exigence | Condition requise |
---|---|
En-tête | Fltkernel.h (inclure Fltkernel.h) |