Fonction MmAllocateNonCachedMemory (ntddk.h)
La routine MmAllocateNonCachedMemory alloue une plage d’adresses virtuelles de mémoire non mise en cache et alignée sur le cache.
Syntaxe
PVOID MmAllocateNonCachedMemory(
[in] SIZE_T NumberOfBytes
);
Paramètres
[in] NumberOfBytes
Spécifie la taille en octets de la plage à allouer.
Valeur retournée
Si la mémoire demandée ne peut pas être allouée, la valeur de retour est NULL. Sinon, il s’agit de l’adresse virtuelle de base de la plage allouée.
Remarques
MmAllocateNonCachedMemory peut être appelé à partir d’une routine DriverEntry pour allouer un bloc de mémoire virtuelle non mis en cache pour différents tampons spécifiques à l’appareil. La fonction retourne toujours un multiple complet de la taille de la page de mémoire virtuelle, de la mémoire de l’espace d’adressage système non paginé, quelle que soit la taille d’allocation demandée.
Les allocations non mises en cache sont alignées sur un multiple intégral de la taille de ligne de cache de données du processeur pour éviter les problèmes de cache et de cohérence.
Les pages de mémoire physique retournées par MmAllocateNonCachedMemory ne sont généralement pas des pages contiguës.
La mémoire allouée par MmAllocateNonCachedMemory n’est pas initialisée. Un pilote en mode noyau doit d’abord zéro cette mémoire s’il veut la rendre visible pour les logiciels en mode utilisateur (afin d’éviter toute fuite de contenu potentiellement privilégié).
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | ntddk.h (inclure Ntddk.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=APC_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport),IrqlMmApcLte(wdm),SpNoWait(storport), StorPortStartIo(storport) |