Share via


Pool spécial

La fonctionnalité Pool spécial configure Windows pour demander des allocations de mémoire à un pool de mémoire réservé lorsque la mémoire est allouée avec une balise de pool spécifiée ou se trouve dans une plage de tailles spécifiée.

Abréviation

Spp

Valeur hexadécimale

(aucune)

Nom symbolique

(aucune)

Destination

Entrée de registre à l’échelle du système

(Windows Vista et versions ultérieures) Entrée de registre à l’échelle du système, indicateur de noyau

Sélection d’une balise de pool

Lorsque vous demandez un pool spécial pour une balise de pool particulière, assurez-vous que votre pilote ou un autre programme en mode noyau utilise une balise de pool unique.

En outre, lors de la création d’une balise de pool (par exemple, à l’aide d’ExAllocatePoolWithTag), envisagez d’entrer les caractères de balise dans l’ordre inverse. Par exemple, si la balise est Fred, envisagez de la saisir comme derF (0x64657246). Les balises de pool sont stockées dans le Registre et affichées dans le débogueur et d’autres outils dans l’ordre inverse (endian inférieur). Si vous les entrez dans l’ordre inverse, ils s’affichent dans l’ordre avant (0x46726564)

Si vous pensez que votre pilote consomme tout le pool spécial, envisagez d’utiliser plusieurs balises de pool dans votre code. Vous pouvez ensuite tester votre pilote plusieurs fois, en affectant un pool spécial à une balise de pool dans chaque test.

Sélectionnez également une balise de pool avec une valeur hexadécimale supérieure à la taille de page du système. Pour le code en mode noyau, si vous entrez une balise de pool dont la valeur est inférieure à PAGE_SIZE, Gflags demande un pool spécial pour toutes les allocations dont la taille est comprise dans la plage correspondante et demande un pool spécial pour les allocations avec une balise de pool équivalente. Par exemple, si vous sélectionnez une taille de 30, un pool spécial sera utilisé pour toutes les allocations comprises entre 17 et 32 octets et pour les allocations avec la balise de pool 0x0030.

Sélection d’une taille d’allocation

Utilisez les instructions suivantes pour sélectionner une taille d’allocation pour la fonctionnalité Pool spécial.

Sur un ordinateur doté d’un processeur x86, PAGE_SIZE est 0x1000 et les plages de tailles d’allocation sont de 8 octets. Pour configurer la fonctionnalité Pool spécial pour toutes les allocations avec des tailles dans cette plage, entrez un nombre égal au maximum de cette plage plus 8. (Ce nombre est toujours un multiple de 8.) Le tableau suivant illustre ces valeurs :

Plage de tailles Entrez ce nombre

1 à 8 octets

10 (décimale 16)

9 à 16 octets

18 (décimale 24)

17 à 24 octets

20 (décimale 32)

...

...

0xFE9 à 0xFF0 octets

FF8 (décimale 4088)

Sur un ordinateur doté d’un processeur AMD x86-64, PAGE_SIZE est 0x1000 et les plages de tailles d’allocation sont de 16 octets. Pour configurer la fonctionnalité Pool spécial pour toutes les allocations avec des tailles dans cette plage, entrez un nombre égal au maximum de cette plage plus 16. (Ce nombre est toujours un multiple de 16.) Le tableau suivant illustre ces valeurs :

Plage de tailles Entrez ce nombre

1 à 16 octets

20 (décimale 32)

17 à 32 octets

30 (décimale 48)

33 à 48 octets

40 (décimale 64)

...

...

0xFD1 en octets de 0xFE0

FF0 (décimale 4080)

Sur un ordinateur avec n’importe quel processeur, vous pouvez utiliser un astérisque ( * ) ou un 0x2A (décimale 42) pour configurer la fonctionnalité Pool spécial pour toutes les allocations de mémoire sur le système.

Commentaires

Pour plus d’informations sur la configuration de la fonctionnalité de pool spécial dans la boîte de dialogue Indicateurs globaux, consultez Configuration d’un pool spécial. Pour plus d’informations sur la configuration de la fonctionnalité De pool spécial sur la ligne de commande, consultez Commandes GFlags. Pour obtenir un exemple, consultez Exemple 14 : Configuration d’un pool spécial.

La fonctionnalité Pool spécial de Gflags indique à Windows de demander des allocations de mémoire à un pool de mémoire réservé lorsque la mémoire est allouée avec une balise de pool spécifiée ou se trouve dans une plage de tailles spécifiée. Pour demander un pool spécial pour toutes les allocations d’un pilote particulier, utilisez Driver Verifier. Pour plus d’informations, consultez la rubrique « Pool spécial » dans la section « Vérificateur de pilotes » du Kit de pilotes Windows (WDK).

Les fonctionnalités de pool spéciales de Gflags et de Driver Verifier vous aident à détecter et à identifier la source des erreurs dans l’utilisation du pool de noyaus, telles que l’écriture au-delà de l’espace mémoire alloué ou la référence à la mémoire qui a déjà été libérée.

Toutes les demandes de pool spéciales ne sont pas traitées. Chaque allocation du pool spécial utilise une page de mémoire physique non paginable et deux pages d’espace d’adressage virtuel. Si le pool spécial est épuisé, la mémoire est allouée à partir du pool standard jusqu’à ce que le pool spécial soit à nouveau disponible. Lorsqu’une demande de pool spéciale est remplie à partir du pool standard, la fonction qui demande retourne une status réussie. Il ne retourne pas d’erreur, car l’allocation a réussi, même si elle n’a pas été remplie à partir d’un pool spécial.

La taille du pool spécial augmente avec la quantité de mémoire physique sur le système ; idéalement, il doit être d’au moins 1 Gigaoctet (Go). Sur les machines x86, étant donné que l’espace virtuel (en plus de l’espace physique) est consommé, n’utilisez pas l’option de démarrage /3 Go lors de l’utilisation d’un pool spécial. Il est également judicieux d’augmenter les quantités minimales/maximales du fichier de pages d’un facteur de deux ou trois.

Vous pouvez également configurer la fonctionnalité Pool spécial pour aligner l’allocation de mémoire afin de détecter les références à la mémoire précédant l’allocation (« sous-exécutions ») ou les références à la mémoire au-delà de l’allocation (« dépassements »). Cette fonctionnalité est disponible uniquement dans la boîte de dialogue Indicateurs globaux sur toutes les versions de Windows. Pour plus d’informations, consultez Détection des dépassements et des dépassements.

Sur Windows Vista et les versions ultérieures de Windows, vous pouvez configurer la fonctionnalité Pool spécial en tant que paramètre de Registre qui nécessite un redémarrage, mais qui reste effectif jusqu’à ce que vous le modifiez, ou en tant que paramètre d’indicateur de noyau qui ne nécessite pas de redémarrage, mais n’est effectif que jusqu’à ce que vous redémarrez ou arrêtiez Windows. Dans les versions antérieures de Windows, le pool spécial n’est disponible qu’en tant que paramètre de Registre.

Sur Windows Vista et les versions ultérieures de Windows, vous pouvez configurer la fonctionnalité Pool spécial à l’aide de la boîte de dialogue Indicateurs globaux ou en ligne de commande. Dans une version antérieure de Windows, cette fonctionnalité n’est disponible que dans la boîte de dialogue Indicateurs globaux.