Macro ExAllocatePool (classpnp.h)
La routine ExAllocatePool est obsolète et n’est exportée que pour les fichiers binaires existants. Utilisez ExAllocatePoolWithTag à la place.
ExAllocatePool alloue la mémoire du pool du type spécifié et retourne un pointeur vers le bloc alloué.
Syntaxe
PVOID ExAllocatePool(
_In_ POOL_TYPE a,
_In_ SIZE_T b
);
Paramètres
a
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 un (PoolType) à l’aide d’un or au niveau du bit avec l’indicateur POOL_COLD_ALLOCATION comme indicateur pour le noyau pour allouer la mémoire à partir de pages susceptibles d’être rapidement paginées. 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.
b
Nombre d’octets à allouer.
Valeur de retour
None
Remarques
Cette routine est utilisée pour l’allocation générale de mémoire du pool.
Si b (NumberOfBytes) est PAGE_SIZE ou supérieur, une mémoire tampon alignée sur la page est allouée. Les allocations de mémoire de PAGE_SIZE ou moins ne dépassent pas les limites des pages. Les allocations de mémoire inférieures à PAGE_SIZE 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.
Une allocation réussie demandant NumberOfBytes< PAGE_SIZE de pool non paginé donne à l’appelant exactement le nombre d’octets de mémoire demandés. Si une demande d’allocation pour NumberOfBytes> PAGE_SIZE réussit et que NumberOfBytes n’est pas un multiple exact de PAGE_SIZE, la dernière page de l’allocation contient des octets qui ne font pas partie de l’allocation de l’appelant. Si possible, l’allocateur de pool utilise ces octets. Pour éviter d’endommager les données qui appartiennent à d’autres composants en mode noyau, les pilotes doivent accéder uniquement aux adresses de stockage qu’ils ont explicitement allouées.
Si ExAllocatePool retourne NULL, l’appelant doit retourner la valeur NTSTATUS STATUS_INSUFFICIENT_RESOURCES ou doit retarder le traitement à un autre moment dans le temps.
Les appelants d’ExAllocatePool 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 qui s’exécute dans 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 page.
Notes
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.
Notes
La mémoire allouée par ExAllocatePool est non 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 |
---|---|
Client minimal pris en charge | Obsolète. Cette routine est exportée uniquement pour les fichiers binaires existants. Utilisez ExAllocatePoolWithTag à la place. |
Plateforme cible | Universal |
En-tête | classpnp.h (inclure Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h, Smcnt.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (voir la section Remarques) |
Règles de conformité DDI | CheckDeviceObjectFlags(wdm),HwStorPortProhibitedDDIs(storport),IrqlExAllocatePool(wdm),PowerDownAllocate(wdm),PowerUpFail(wdm), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf), UnsafeAllocatePool(wdm) |