Partager via


FsRtlMdlReadEx, fonction (ntifs.h)

La routine FsRtlMdlReadEx effectue une lecture MDL mise en cache rapide. Si les données demandées ne sont pas mises en cache, la routine revient à une opération de lecture MDL basée sur IRP.

Syntaxe

NTSTATUS FsRtlMdlReadEx(
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Paramètres

[in] FileObject

Pointeur vers l’objet fichier.

[in] FileOffset

Pointeur vers une variable qui spécifie le décalage d’octets de départ dans le fichier mis en cache qui contient les données.

[in] Length

Longueur en octets des données à lire à partir du cache.

[in] LockKey

Valeur associée à la plage d’octets à verrouiller. Si la plage à verrouiller chevauche une autre plage qui est déjà verrouillée avec un verrou non-cluster ou si la plage à lire est une sous-plage d’une autre plage qui est déjà verrouillée de manière non-cluster, la valeur de ce paramètre doit être la clé de ce verrou non cluster. Le verrou doit être conservé par le processus parent du thread appelant. Sinon, ce paramètre n’a aucun effet.

[out] MdlChain

Adresse d’une variable qui reçoit un pointeur vers une liste liée de listes de descripteurs de mémoire (MDL). mdlChain doit être initialisé pour NULL avant l’appel à FsRtlMdlReadEx.

[out] IoStatus

Pointeur vers une structure IO_STATUS_BLOCK qui, en sortie, contient l’état du transfert. Si l’opération réussit, IoStatus.Status est défini sur STATUS_SUCCESS. Sinon, il est défini sur un code d’erreur NTSTATUS approprié. IoStatus.Information est défini sur le nombre réel d’octets verrouillés par la routine.

Valeur de retour

FsRtlMdlReadEx retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, comme l’une des valeurs suivantes :

Retourner le code Description
STATUS_INSUFFICIENT_RESOURCES L’IRP d’une lecture basée sur IRP n’a pas pu être allouée.

Remarques

Si les E/S rapides sont disponibles à partir du système de fichiers, les FsRtlMdlReadEx routine contournent le mécanisme de lecture IRP habituel et retournent une liste liée de listes de descripteurs de mémoire (MDL) que l’appelant peut utiliser pour accéder directement aux données du fichier mis en cache. Cette opération ne copie pas ou ne met pas en mémoire tampon les données et est donc beaucoup plus rapide qu’une lecture normale. Si les E/S rapides ne sont pas activées, FsRtlMdlReadEx génère une lecture MDL basée sur IRP synchrone et retourne les DLL de la requête.

Les pages décrites par les DLL sont verrouillées en mémoire, mais pas mappées dans l’espace système. L’appelant peut effectuer ce mappage en appelant MmGetSystemAddressForMdlSafe.

Comme CcMdlRead, la routine FsRtlMdlReadEx verrouille les pages qui contiennent les données du fichier mis en cache pour empêcher le système d’échanger ces pages vers le fichier de page. Les pages restent verrouillées en mémoire jusqu’à ce que l’appelant appelle la routine ccMdlReadComplete .

Exigences

Exigence Valeur
client minimum pris en charge Windows 8
plateforme cible Universel
d’en-tête ntifs.h (include Ntifs.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Voir aussi

CcMdlRead

CcMdlReadComplete

IO_STATUS_BLOCK

MmGetSystemAddressForMdlSafe