FsRtlPrepareMdlWriteEx, fonction (ntifs.h)
La routine FsRtlPrepareMdlWriteEx 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. 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 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 à é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 nonexclusive, la valeur dans 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
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.
Valeur retournée
FsRtlPrepareMdlWriteEx retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, par exemple :
Code de retour | Description |
---|---|
|
Impossible d’allouer un IRP pour l’écriture basée sur IRP. |
Remarques
Si des E/S rapides sont disponibles pour le système de fichiers, la routine FsRtlPrepareMdlWriteEx contourne le mécanisme d’écriture IRP habituel et retourne une liste liée de listes de descripteurs mémoire (MDL) que l’appelant peut utiliser pour écrire des données directement dans le cache de fichiers. Au lieu de copier les données mises en mémoire tampon dans le cache, les pages physiques que l’appelant remplacera sont verrouillées en mémoire et peuvent être écrites directement dans. FsRtlPrepareMdlWriteEx retourne une ou plusieurs listes de descripteurs de mémoire (MDL) qui pointent vers la plage d’octets spécifiée.
Si les E/S rapides n’sont pas activées, FsRtlPrepareMdlWriteEx génère une préparation d’écriture MDL basée sur IRP synchrone et retourne les LISTES MDL allouées à partir de la requête.
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.
Chaque appel à FsRtlPrepareMdlWriteEx doit être suivi d’un appel à CcMdlWriteComplete.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | ntifs.h (include Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |