Partager via


Fonction FltFastIoPrepareMdlWrite (fltkernel.h)

La routine FltFastIoPrepareMdlWrite retourne une liste liée de listes de descripteurs de mémoire (MDL) 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.

Syntaxe

BOOLEAN FLTAPI FltFastIoPrepareMdlWrite(
        PFLT_INSTANCE    InitiatingInstance,
  [in]  PFILE_OBJECT     FileObject,
  [in]  PLARGE_INTEGER   FileOffset,
  [in]  ULONG            Length,
  [in]  ULONG            LockKey,
  [out] PMDL             *MdlChain,
  [out] PIO_STATUS_BLOCK IoStatus
);

Paramètres

InitiatingInstance

Pointeur de instance opaque pour l’appelant. Ce paramètre est obligatoire et ne peut pas avoir la valeur NULL.

[in] FileObject

Pointeur vers l’objet de fichier.

[in] FileOffset

Pointeur vers une valeur qui spécifie le décalage d’octet de début dans le 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 déjà verrouillée avec un verrou non exclusif, ou si la plage à lire est une sous-plage d’une autre plage déjà verrouillée non exclusivement, la valeur de ce paramètre doit être la clé de ce verrou non exclusif. 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 listes de descripteurs de mémoire (MDL) qui pointent vers la plage d’octets dans les données mises en cache.

[out] IoStatus

Pointeur vers une structure de IO_STATUS_BLOCK qui, en sortie, contient les status 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 que la routine a correctement verrouillés.

Valeur retournée

La routine FltFastIoPrepareMdlWrite retourne TRUE si l’opération réussit et FALSE si l’opération échoue.

Remarques

FltFastIoPrepareMdlWrite est similaire à FsRtlCopyWrite, sauf que FltFastIoPrepareMdlWrite ne copie pas les données dans le cache. Au lieu de cela, les pages physiques que l’appelant remplacera sont verrouillées dans la mémoire, et FltFastIoPrepareMdlWrite retourne une ou plusieurs listes de descripteurs de mémoire (MDL) qui pointent vers la plage d’octets spécifiée. Les pages verrouillées restent verrouillées jusqu’à ce que l’appelant appelle FltFastIoMdlWriteComplete.

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.

Même si l’appel à FltFastIoPrepareMdlWrite échoue, une ou plusieurs MDL peuvent avoir été allouées. L’appelant peut examiner la valeur de IoStatus.Information pour déterminer si cela s’est produit. Si c’est le cas, l’appelant doit appeler FltFastIoMdlWriteComplete pour libérer les dll MDL allouées.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête fltkernel.h (inclure Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

Voir aussi

FltFastIoMdlWriteComplete

FsRtlCopyWrite

MmGetSystemAddressForMdlSafe