Partager via


ExAllocatePoolWithQuota, fonction (wdm.h)

Avertissement

La routine ExAllocatePoolWithQuota est obsolète et a été dépréciée dans Windows 10 version 2004 et a été remplacée par ExAllocatePool2. Pour plus d’informations, consultez Mise à jour d’appels ExAllocatePool dépréciés vers ExAllocatePool2 et ExAllocatePool3.

Lorsque vous développez des pilotes pour une version de Windows antérieure à Windows 10 version 2004, utilisez ExAllocatePoolQuotaZero.

ExAllocatePoolWithQuota alloue la mémoire du pool, en facturant le quota par rapport au processus actuel.

Syntaxe

PVOID ExAllocatePoolWithQuota(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

Paramètres

[in] PoolType

Spécifie le type de mémoire de pool à allouer. Pour obtenir une description des types de mémoire de pool disponibles, consultez POOL_TYPE.

Vous pouvez modifier PoolType en utilisant un or au niveau du bit avec l’indicateur POOL_COLD_ALLOCATION comme indicateur pour le noyau afin d’allouer la mémoire à partir des pages susceptibles d’être paginées rapidement. Pour réduire autant que possible la quantité de mémoire du pool résident, vous ne devez pas référencer ces allocations fréquemment. L’indicateur POOL_COLD_ALLOCATION est uniquement un avertissement et est disponible pour Windows XP et les versions ultérieures du système d’exploitation Windows.

[in] NumberOfBytes

Spécifie le nombre d'octets à allouer.

Valeur retournée

ExAllocatePoolWithQuota retourne un pointeur vers le pool alloué.

Si la demande ne peut pas être satisfaite, ExAllocatePoolWithQuota lève une exception.

Remarques

Cette routine est appelée par les pilotes de niveau supérieur qui allouent de la mémoire pour répondre à une demande dans le contexte du processus qui a initialement effectué la demande d’E/S. Les pilotes de niveau inférieur appellent à la place ExAllocatePoolWithTag .

Si NumberOfBytes est PAGE_SIZE ou supérieur, une mémoire tampon alignée sur la page est allouée. Le quota n’est pas facturé au processus pour les allocations de PAGE_SIZE ou plus.

Les allocations de mémoire inférieures à PAGE_SIZE sont allouées au sein d’une page et ne dépassent pas les limites des pages. Les allocations de mémoire de PAGE_SIZE ou moins ne sont pas nécessairement alignées sur les pages, mais sont alignées sur des limites de 8 octets dans les systèmes 32 bits et sur des limites de 16 octets dans les systèmes 64 bits.

Ne définissez pas NumberOfBytes = 0. Évitez les allocations de longueur nulle, car elles gaspillez l’espace d’en-tête du pool et, dans de nombreux cas, indiquent un problème de validation potentiel dans le code appelant. Pour cette raison, Driver Verifier signale ces allocations comme erreurs possibles.

Le système définit automatiquement certains objets d’événements standard lorsque la quantité de pool (paginée ou non paginée) est élevée ou faible. Les pilotes peuvent attendre que ces événements optimisent l’utilisation de leur pool. Pour plus d’informations, consultez Objets d’événements standard.

La mémoire allouée par ExAllocatePoolWithQuota 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é).

Les appelants d’ExAllocatePoolWithQuota doivent s’exécuter sur IRQL <= DISPATCH_LEVEL. Un appelant qui s’exécute à DISPATCH_LEVEL doit spécifier une valeur Xxxnon paginé pour PoolType. Un appelant s’exécutant à IRQL <= APC_LEVEL peut spécifier n’importe quelle valeur POOL_TYPE, mais l’IRQL et l’environnement doivent également être pris en compte pour déterminer le type de pool.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Obsolète. Cette routine est exportée uniquement pour les fichiers binaires de pilotes existants. Utilisez à la place ExAllocatePoolWithQuotaTag.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (voir la section Remarques)
Règles de conformité DDI HwStorPortProhibitedDDIs(storport),SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

Voir aussi

ExAllocatePoolWithQuotaTag

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE