Macro ExAllocatePoolWithQuota (classpnp.h)
La routine ExAllocatePoolWithQuota est obsolète et est exportée uniquement pour les fichiers binaires de pilotes existants. Utilisez ExAllocatePoolWithQuotaTag à la place.
ExAllocatePoolWithQuota alloue de la mémoire du pool, en chargeant le quota par rapport au processus actuel.
Syntaxe
PVOID ExAllocatePoolWithQuota(
_In_ POOL_TYPE a,
_In_ SIZE_T b
);
Paramètres
a
Spécifie le type de mémoire du pool à allouer. Pour obtenir une description des types de mémoire de pool disponibles, consultez POOL_TYPE.
Vous pouvez modifier un (PoolType) à l’aide d’une or au niveau du bit avec l’indicateur de POOL_COLD_ALLOCATION comme indicateur au noyau pour allouer la mémoire à partir de 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 consultatif et est disponible pour Windows XP et les versions ultérieures du système d’exploitation Windows.
b
Spécifie le nombre d’octets à allouer.
Valeur de retour
Aucun
Remarques
Cette routine est appelée par les pilotes de niveau supérieur qui allouent de la mémoire pour satisfaire une requête dans le contexte du processus qui a initialement effectué la requête d’E/S. Les pilotes de niveau inférieur appellent ExAllocatePoolWithTag à la place.
Si b (NumberOfBytes) est PAGE_SIZE ou supérieur, une mémoire tampon alignée sur les pages est allouée. Le quota n’est pas facturé au processus d’allocation de PAGE_SIZE ou supérieur.
Les allocations de mémoire inférieures à PAGE_SIZE sont allouées dans une page et ne dépassent pas les limites de page. 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.
Note
Ne définissez pas NumberOfBytes = 0. Évitez les allocations de longueur nulle, car elles gaspillent 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, vérificateur de pilotes indicateurs tels que les 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 ajustent l’utilisation de leur pool. Pour plus d’informations, consultez standard Event Objects.
Note
Mémoire qui ExAllocatePoolWithQuota alloue est non initialisée. Un pilote en mode noyau doit d’abord zéro cette mémoire s’il va le rendre visible par les logiciels en mode utilisateur (pour éviter la fuite de contenu potentiellement privilégié).
Les appelants de ExAllocatePoolWithQuota doivent s’exécuter à l'<IRQL = DISPATCH_LEVEL. Un appelant s’exécutant à DISPATCH_LEVEL doit spécifier une valeur NonPagedXxx pour PoolType. Un appelant s’exécutant au <IRQL = APC_LEVEL peut spécifier n’importe quelle valeur de POOL_TYPE, mais l’environnement et irQL doivent également être pris en compte pour déterminer le type de pool.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Obsolète. Cette routine est exportée uniquement pour les fichiers binaires de pilotes existants. Utilisez à la place ExAllocatePoolWithQuotaTag. |
plateforme cible | Universel |
d’en-tête | classpnp.h (include 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) |