ExAllocatePoolZero, fonction (wdm.h)

Attention

Microsoft a connaissance d’un problème avec ExAllocatePoolZero qui peut entraîner une allocation qui n’est pas mise à zéro sur Windows 10, version 1909. Ce problème a été résolu lors d’une actualisation de sécurité du WDK pour Windows 10, version 2004 et du WDK Entreprise (EWDK) pour Windows 10, version 2004 le 16 décembre 2020. Pour plus d’informations sur le téléchargement de la dernière clé WDK, consultez Télécharger le Kit de pilotes Windows (WDK).

Cette routine est un wrapper pour et une option de remplacement recommandée pour ExAllocatePoolWithTag.

ExAllocatePoolZero alloue la mémoire du pool du type spécifié et retourne un pointeur vers le bloc alloué. Il est identique à ExAllocatePoolWithTag , mais zéro initialise la mémoire allouée.

Syntaxe

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Paramètres

PoolType

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 la valeur d’énumération en effectuant une opération OR au niveau du bit avec l’indicateur POOL_RAISE_IF_ALLOCATION_FAILURE défini dans wdm.h. Cet indicateur provoque le déclenchement d’une exception si la demande ne peut pas être satisfaite. L’utilisation de cet indicateur n’est pas recommandée, car elle est coûteuse.

De même, vous pouvez modifier la valeur PoolType en oRing cette valeur au niveau du bit avec l’indicateur POOL_COLD_ALLOCATION (également défini dans wdm.h) comme indicateur au noyau pour allouer la mémoire 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 consultatif.

NumberOfBytes

Nombre d'octets à allouer.

Tag

Balise de pool à utiliser pour la mémoire allouée. Spécifiez la balise de pool sous la forme d’un littéral de caractères non nul de un à quatre caractères délimités par des guillemets simples (par exemple, Tag1). La chaîne est généralement spécifiée dans l’ordre inverse (par exemple, 1gaT). Chaque caractère ASCII de la balise doit être une valeur dans la plage 0x20 (espace) à 0x7E (tilde). Chaque chemin de code d’allocation doit utiliser une balise de pool unique pour aider les débogueurs et les vérificateurs à identifier le chemin du code.

Valeur retournée

ExAllocatePoolZero retourne NULL si la mémoire dans le pool libre est insuffisante pour répondre à la demande. Sinon, la routine retourne un pointeur vers la mémoire allouée.

Remarques

Cette routine est utilisée pour l’allocation générale de mémoire du pool.

Pour s’exécuter sur des versions de Windows antérieures à Windows 10 version 2004, le pilote doit définir POOL_ZERO_DOWN_LEVEL_SUPPORT et appeler ExInitializeDriverRuntime avant d’appeler cette fonction.

La seule différence entre cette fonction et ExAllocatePoolWithTag est que la mémoire est zéro initialisée. Si ce n’est pas souhaité, utilisez à la place ExAllocatePoolUninitialized , qui est un wrapper pour ExAllocatePoolWithTag.

Un pilote doit uniquement accéder à la mémoire dans la plage d’octets qu’il alloue. L’accès à la mémoire en dehors de cette plage peut endommager le pool et provoquer le blocage du système.

Pour obtenir des conseils supplémentaires, consultez la section Remarques de ExAllocatePoolWithTag .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Nécessite WDK pour Windows 10, version 2004. Cible Windows 7 et versions ultérieures du système d’exploitation Windows.
Plateforme cible Universal
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (voir la section Notes)
Règles de conformité DDI CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

Voir aussi

ExAllocatePoolUninitialized