FLT_PARAMETERS pour l’union IRP_MJ_DEVICE_CONTROL et IRP_MJ_INTERNAL_DEVICE_CONTROL
Composant Union utilisé lorsque le champ MajorFunction de la structure FLT_IO_PARAMETER_BLOCK de l’opération est IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL.
Syntaxe
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
} FastIo;
} DeviceIoControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Membres
Commun : composant Union utilisé pour toutes les méthodes de mise en mémoire tampon (Ni, Buffered et FastIo).
OutputBufferLength : longueur, en octets, de la mémoire tampon vers laquelle pointe le membre Neither.OutputBuffer, Direct.OutputBuffer ou FastIo.OutputBuffer .
InputBufferLength : longueur, en octets, de la mémoire tampon vers laquelle pointe le membre Neither.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer ou FastIo.InputBuffer .
IoControlCode : code de fonction IOCTL à transmettre au pilote de périphérique pour l’appareil cible. Pour plus d’informations sur les demandes IOCTL, consultez Utilisation de codes de contrôle d’E/S et « Codes de contrôle d’entrée et de sortie de l’appareil » dans la documentation Microsoft Windows SDK. (Cette ressource n’est peut-être pas disponible dans certaines langues et certains pays.)
Ni l’un ni l’autre : composant Union utilisé 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 dans le Guide d’architecture du mode noyau.
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 s’assurer que les adresses d’espace utilisateur sont valides, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et FltLockUserBuffer, englobant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Utilisation d’E/S directes etd’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 s’assurer que les adresses d’espace utilisateur sont valides, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et FltLockUserBuffer, englobant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Utilisation d’E/S directes ou mises en mémoire tampon et erreurs dans le référencement d’adresses User-Space dans le Guide d’architecture du mode noyau.
Neither.OutputMdlAddress : adresse d’une liste de descripteurs mémoire (MDL) qui décrit la mémoire tampon vers laquelle le membre Neither.OutputBuffer pointe. Ce membre est facultatif et peut être NULL.
Mis en mémoire tampon : composant Union utilisé 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 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é 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.
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 accessible en toute sécurité à 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 sécurisée d’accès à 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 à partir de la liste de descripteurs mémoire (MDL) vers laquelle 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 MDL qui décrit la mémoire tampon vers laquelle pointe le membre Direct.OutputBuffer . Ce membre est obligatoire et ne peut pas être NULL.
FastIo : composant Union utilisé lorsque la structure FLT_CALLBACK_DATA représente une opération d’E/S IRP_MJ_DEVICE_CONTROL rapide.
FastIo.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 s’assurer que les adresses d’espace utilisateur sont valides, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et FltLockUserBuffer, englobant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Erreurs dans le référencement d’adresses User-Space.
FastIo.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 s’assurer que les adresses d’espace utilisateur sont valides, le minifiltre doit utiliser des routines telles que ProbeForRead, ProbeForWrite et FltLockUserBuffer, englobant toutes les références de mémoire tampon dans des blocs try/except . Pour plus d’informations, consultez Erreurs dans le référencement d’adresses User-Space.
Remarques
La structure FLT_PARAMETERS pour les opérations de IRP_MJ_DEVICE_CONTROL et de IRP_MJ_INTERNAL_DEVICE_CONTROL contient les paramètres d’une opération d’informations de contrôle d’E/S d’appareil basée sur IRP représentée par une structure de données de rappel (FLT_CALLBACK_DATA). Il est contenu dans une structure FLT_IO_PARAMETER_BLOCK .
IRP_MJ_DEVICE_CONTROL peut être une opération basée sur IRP ou une opération d’E/S rapide.
IRP_MJ_INTERNAL_DEVICE_CONTROL est une opération d’E/S basée sur IRP.
Configuration requise
Type d’exigence | Condition requise |
---|---|
En-tête | Fltkernel.h ( incluez Fltkernel.h) |