Partager via


Fonction FltDecodeParameters (fltkernel.h)

FltDecodeParameters retourne des pointeurs vers l’adresse MDL (liste de descripteurs de mémoire), le pointeur de mémoire tampon, la longueur de la mémoire tampon et les paramètres d’accès souhaités pour une opération d’E/S. Cela évite aux pilotes de minifiltre d’avoir une instruction switch pour rechercher la position de ces paramètres dans les routines d’assistance qui accèdent à l’adresse MDL, au pointeur de mémoire tampon, à la longueur de la mémoire tampon et à l’accès souhaité pour plusieurs types d’opérations.

Syntaxe

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

Paramètres

[in] CallbackData

Pointeur vers la structure de données de rappel (FLT_CALLBACK_DATA) pour l’opération d’E/S.

[out] MdlAddressPointer

Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers le membre MdlAddress (ou OutputMdlAddress) de la structure des paramètres de données de rappel (FLT_PARAMETERS) (notez que ce membre est lui-même un pointeur). Ce paramètre est facultatif et peut être NULL. Si l’opération d’E/S n’a pas de champ MDL, ce paramètre reçoit NULL.

[out] Buffer

Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers le membre de mémoire tampon approprié (en fonction du code de fonction principal) dans la structure des paramètres de données de rappel (notez que ce membre est lui-même un pointeur).

[out] Length

Pointeur vers une variable fournie par l’appelant qui reçoit un pointeur vers le membre de longueur de mémoire tampon dans la structure des paramètres de données de rappel. Si l’opération n’a pas de champ de longueur, ce paramètre reçoit NULL.

[out, optional] DesiredAccess

Pointeur vers une variable fournie par l’appelant qui reçoit le type d’accès approprié pour ce type d’opération d’E/S, ioReadAccess, IoWriteAccess ou IoModifyAccess. IoReadAccess signifie que le pilote de minifiltre peut examiner le contenu de la mémoire tampon, mais ne peut pas modifier le contenu en place. IoWriteAccess et IoModifyAccess, qui sont équivalents, signifient que le pilote de minifiltre dispose d’un accès en lecture et en écriture à la mémoire tampon.

Valeur retournée

FltDecodeParameters retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, par exemple :

Code de retour Description
STATUS_INVALID_PARAMETER La structure de données de rappel (FLT_CALLBACK_DATA) représente une opération d’E/S qui n’a pas de paramètres de mémoire tampon. Il s’agit d’un code d’erreur.

Remarques

FltDecodeParameters retourne des pointeurs vers les paramètres d’une opération d’E/S, plutôt que les valeurs de paramètre, afin que l’appelant puisse modifier les valeurs des paramètres si vous le souhaitez.

FltDecodeParameters peut être utilisé pour les opérations d’E/S rapides ainsi que pour les opérations basées sur IRP. Cela n’est pas significatif pour les opérations de rappel de filtre de système de fichiers (FSFilter), car ces opérations n’ont pas de paramètres de mémoire tampon.

Les opérations IOCTL et FSCTL peuvent avoir une ou deux mémoires tampons, selon la méthode de mise en mémoire tampon utilisée. Dans les cas où l’opération a deux mémoires tampons (et deux champs de longueur), FltDecodeParameters retourne les champs OutputBuffer, OutputBufferLength et/ou OutputMdlAddress selon les besoins.

Les quatre paramètres ne sont pas tous retournés pour chaque opération d’E/S. Par exemple, pour une requête IRP_MJ_READ, FltDecodeParameters définit les paramètres de sortie comme suit.

Paramètre Valeur
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Durée &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête fltkernel.h (inclure Fltkernel.h)
Bibliothèque FltMgr.lib
IRQL N’importe quel niveau

Voir aussi

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer