Partager via


Fonction FltGetSwappedBufferMdlAddress (fltkernel.h)

La routine FltGetSwappedBufferMdlAddress retourne l’adresse MDL (Descriptor list) de mémoire pour une mémoire tampon qui a été permutée par un pilote de minifiltre.

Syntaxe

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

Paramètres

[in] CallbackData

Pointeur vers la structure de données de rappel pour l’opération.

Valeur retournée

FltGetSwappedBufferMdlAddress retourne l’adresse MDL de la mémoire tampon qui a été permutée par l’appelant. FltGetSwappedBufferMdlAddress retourne null dans les cas suivants :

  • L’opération est une opération d’E/S rapide. Dans une opération d’E/S rapide, la mémoire tampon ne peut pas avoir de MDL.
  • La mémoire tampon qui a été permutée par l’appelant n’a pas de MDL.
  • Le pilote de minifiltre n’a pas échangé les tampons dans la routine de rappel de préopération.

Remarques

Un pilote de minifiltre qui échange dans une nouvelle mémoire tampon dans une routine de rappel de préopération peut obtenir l’adresse MDL de la mémoire tampon en appelant FltGetSwappedBufferMdlAddress à partir de la routine de rappel post-opération correspondante.

La routine FltGetSwappedBufferMdlAddress est nécessaire, car la routine de rappel post-opération reçoit une structure de données de rappel qui contient la mémoire tampon et l’adresse MDL d’origine, et non celles qui ont été échangées par la routine de rappel de préopération de l’appelant.

FltGetSwappedBufferMdlAddress peut retourner une valeur MDL non NULL même si l’appelant n’a pas créé de MDL pour la mémoire tampon dans laquelle il a échangé. Cela se produit lorsqu’un MDL est créé pour la mémoire tampon par un pilote de minifiltre, un pilote de filtre hérité ou un pilote de système de fichiers qui se trouve sous l’appelant dans la pile de pilotes de minifiltre ou de système de fichiers.

Il est également possible pour FltGetSwappedBufferMdlAddress de retourner une valeur MDL non NULL même si l’appelant n’a pas échangé dans une nouvelle mémoire tampon dans sa routine de rappel de préopération. Cela se produit dans les opérations, telles que les E/S de pagination, où la mémoire tampon a la valeur NULL et où l’appelant échange dans une nouvelle adresse MDL.

Le MDL de la mémoire tampon qui a été permutée par l’appelant est automatiquement libéré par le Gestionnaire de filtres lorsque la routine de rappel post-opération est retournée. Pour empêcher la libération de cette MDL, appelez FltRetainSwappedBufferMdlAddress.

FltGetSwappedBufferMdlAddress ne peut être appelé qu’à partir d’une routine de rappel post-opération.

Configuration requise

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

Voir aussi

FltDecodeParameters

FltRetainSwappedBufferMdlAddress