FsRtlPrepareMdlWriteDev, fonction (ntifs.h)
La routine FsRtlPrepareMdlWriteDev retourne une liste liée de listes de descripteurs 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 FsRtlPrepareMdlWriteDev(
[in] PFILE_OBJECT FileObject,
[in] PLARGE_INTEGER FileOffset,
[in] ULONG Length,
[in] ULONG LockKey,
[out] PMDL *MdlChain,
[out] PIO_STATUS_BLOCK IoStatus,
[ in, optional ] PDEVICE_OBJECT DeviceObject
);
Paramètres
[in] FileObject
Pointeur vers l’objet file.
[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 à 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
Lors de la sortie, pointeur vers une liste liée de listes de descripteurs mémoire (MDL) qui pointent vers la plage d’octets dans les données mises en cache.
[out] IoStatus
Pointeur vers une structure IO_STATUS_BLOCK qui, à la sortie, contient le 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.
[ in, optional ] DeviceObject
Pointeur vers un objet d’appareil sur lequel le fichier est ouvert.
Valeur retournée
La routine FsRtlPrepareMdlWriteDev retourne TRUE si l’opération réussit et FALSE si l’opération échoue.
Remarques
FsRtlPrepareMdlWriteDev est similaire à FsRtlCopyWrite, sauf que FsRtlPrepareMdlWriteDev ne copie pas les données dans le cache. Au lieu de cela, les pages physiques que l’appelant remplacera sont verrouillées en mémoire, et FsRtlPrepareMdlWriteDev retourne une ou plusieurs listes de descripteurs 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 FsRtlMdlWriteCompleteDev.
Les pages vers lesquelles les DLL 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 à FsRtlPrepareMdlWriteDev échoue, une ou plusieurs DLL ont peut-être é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 FsRtlMdlWriteCompleteDev pour libérer les DLL allouées.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | ntifs.h (include Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |