Allocation de pool et routines gratuites
RDBSS fournit un certain nombre de routines à utiliser pour l’allocation de pool. Normalement, ces routines sont appelées à l’aide de macros, et non en appelant ces routines directement. Les macros gèrent automatiquement les différences entre les builds de vente au détail et les builds vérifiées.
Sur une build vérifiée, ces routines ont été conçues pour ajouter des wrappers autour de l’allocation de noyau normale et des routines gratuites. Ces wrappers pour l’allocation de pool et les routines gratuites fournissent des informations de débogage supplémentaires et appellent un ensemble de routines qui effectuent différents types de vérification et de protection avant d’appeler l’allocation du pool de noyau et les routines gratuites. Toutefois, ces fonctionnalités ne sont actuellement pas implémentées dans ces routines d’allocation et gratuites, mais peuvent être ajoutées dans les versions ultérieures.
Sur une build gratuite, ces routines deviennent des appels directs à l’allocation du noyau et aux routines gratuites, ExAllocatePoolWithTag et ExFreePool.
Le tableau suivant répertorie l’allocation de pool RDBSS et les routines gratuites.
Routine | Description |
---|---|
Cette routine alloue de la mémoire à partir d’un pool avec une balise de quatre octets au début du bloc, ce qui peut aider à intercepter les problèmes de mémoire. Il est recommandé d’appeler la macro RxAllocatePoolWithTag au lieu d’utiliser cette routine directement. |
|
Cette routine vérifie la présence d’une signature d’en-tête RX_POOL_HEADER spéciale dans un bloc de mémoire. Notez qu’un pilote de mini-redirecteur réseau doit ajouter ce bloc de signature spécial à la mémoire allouée pour pouvoir utiliser la routine. Cette routine ne doit pas être utilisée, car ce bloc d’en-tête spécial n’a pas été implémenté. |
|
Cette routine libère un pool de mémoire. Il est recommandé d’appeler la macro RxFreePool au lieu d’utiliser cette routine directement. |
Plusieurs macros, définies dans le fichier d’en-tête ntrxdef.h, appellent ces routines. Au lieu d’appeler directement les routines répertoriées dans le tableau précédent, les macros suivantes sont normalement utilisées.
Macro | Description |
---|---|
RxAllocatePoolWithTag (type, taille, balise) |
Sur les builds vérifiées, cette macro alloue de la mémoire à partir d’un pool avec une balise de quatre octets au début du bloc qui peut aider à intercepter les instances de corbeille de mémoire. Sur les builds commerciales, cette macro devient un appel direct à ExAllocatePoolWithTag. |
RxCheckMemoryBlock (ptr) |
Sur les builds vérifiées, cette macro vérifie la présence d’une signature d’en-tête RX_POOL_HEADER spéciale dans un bloc de mémoire. Sur les builds de vente au détail, cette macro ne fait rien. |
RxFreePool (ptr) |
Sur les builds cochées, cette macro libère un pool de mémoires. Sur les builds commerciales, cette macro devient un appel direct à ExFreePool. |