Fonction FsRtlMdlReadEx (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 file.
[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 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 de manière nonexclusive, 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
Adresse d’une variable qui reçoit un pointeur vers une liste liée de listes de descripteurs mémoire (MDL). MdlChain doit être initialisé sur NULL avant l’appel à FsRtlMdlReadEx.
[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
FsRtlMdlReadEx retourne STATUS_SUCCESS ou une valeur NTSTATUS appropriée, par exemple :
Code de retour | Description |
---|---|
STATUS_INSUFFICIENT_RESOURCES | L’IRP d’une lecture basée sur IRP n’a pas pu être allouée. |
Remarques
Si des E/S rapides sont disponibles à partir du système de fichiers, la routine FsRtlMdlReadEx contourne le mécanisme de lecture IRP habituel et retourne une liste liée de listes de descripteurs 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 à partir 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.
À l’instar de 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 .
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 |
Plateforme cible | Universal |
En-tête | ntifs.h (include Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour