Partager via


FsRtlPrepareMdlWriteEx, fonction (ntifs.h)

La routine FsRtlPrepareMdlWriteEx retourne une liste liée de listes de descripteurs de mémoire (MDLs) qui pointent vers la plage spécifiée de données de fichier mises en cache pour écrire des données directement dans le cache. Si la prise en charge du cache pour l’écriture n’est pas disponible, la routine revient à une opération d’écriture MDL basée sur IRP.

Syntaxe

NTSTATUS FsRtlPrepareMdlWriteEx(
  [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 valeur qui spécifie le décalage d’octets de départ dans le cache qui contient les données.

[in] Length

Longueur en octets des données à écrire dans le 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

En sortie, un pointeur vers une liste liée de descripteurs de mémoire (MDLs) pointant vers la plage d’octets dans les données mises en cache.

[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

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

Retourner le code Description
STATUS_INSUFFICIENT_RESOURCES
Impossible d’allouer un IRP pour l’écriture basée sur IRP.

Remarques

Si les E/S rapides sont disponibles pour le système de fichiers, les FsRtlPrepareMdlWriteEx routine contournent le mécanisme d’écriture IRP habituel et retournent une liste liée de listes de descripteurs de mémoire (MDL) que l’appelant peut utiliser pour écrire des données directement dans le cache de fichiers. Au lieu de copier des données mises en mémoire tampon dans le cache, les pages physiques sur lesquelles l’appelant remplacera sont verrouillées en mémoire et peuvent être écrites directement. FsRtlPrepareMdlWriteEx retourne une ou plusieurs listes de descripteurs de mémoire qui pointent vers la plage d’octets spécifiée.

Si les E/S rapides ne sont pas activées, FsRtlPrepareMdlWriteEx génère une préparation en écriture MDL basée sur IRP synchrone et retourne les DLL allouées à partir de la requête.

Les pages vers lesquelles les DLL MDL pointent sont verrouillées en mémoire, mais ne sont pas mappées dans l’espace système. L’appelant peut effectuer ce mappage en appelant MmGetSystemAddressForMdlSafe.

Chaque appel à FsRtlPrepareMdlWriteEx doit être suivi d’un appel à CcMdlWriteComplete.

Exigences

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

Voir aussi

CcMdlWriteComplete

CcPrepareMdlWrite

MmGetSystemAddressForMdlSafe