Partager via


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)

Voir aussi

AllocationCommonBuffer

KeGetDcacheFillSize

MmAllocateContiguousMemory

MmAllocateContiguousMemorySpecifyCache

MmFreeNonCachedMemory