Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La fonctionnalité Pool spécial configure Windows pour demander des allocations de mémoire à partir d’un pool de mémoire réservés lorsque la mémoire est allouée avec une balise de pool spécifiée ou qu’elle se trouve dans une plage de tailles spécifiée.
Abbreviation |
Spp |
Valeur hexadécimale |
(Aucun) |
Nom symbolique |
(Aucun) |
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 spécifique, 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 l’entrer en tant que 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 (bas-endian). Si vous les entrez dans l'ordre inverse, ils sont affichés dans l'ordre normal (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 attribuant 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 du 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 se trouve 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 de taille 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 de longueur. Pour configurer la fonctionnalité Pool spécial pour toutes les allocations avec des tailles de 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écimal 32) |
... |
... |
De 0xFE9 à 0xFF0 octets |
FF8 (décimal 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 de longueur. Pour configurer la fonctionnalité Pool spécial pour toutes les allocations dont les tailles sont dans cet intervalle, entrez un nombre égal au maximum de cet intervalle augmenté de 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écimal 32) |
17 à 32 octets |
30 (décimale 48) |
33 à 48 octets |
40 (décimal 64) |
... |
... |
De 0xFD1 à 0xFE0 octets |
FF0 (décimal 4080) |
Sur un ordinateur avec n’importe quel processeur, vous pouvez utiliser un astérisque ( * ) ou 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é 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é Pool spécial sur la ligne de commande, consultez Commandes GFlags. Pour obtenir un exemple, consultez l’exemple 14 : Configuration d’un pool spécial.
La fonctionnalité Pool spécial de Gflags dirige Windows pour demander des allocations de mémoire à partir d’un pool de mémoire réservés 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 par 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 d’erreurs dans le pool de noyau, 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 remplies. Chaque allocation du pool spécial utilise une page de mémoire physique non modifiable 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 a fait la demande retourne un statut de réussite. Elle 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 s’agir d’au moins 1 Gigaoctet (Go). Sur les machines x86, car 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 gérer 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 sous-exécutions.
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 reste effective 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êtez 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 sur la ligne de commande. Dans la version antérieure de Windows, cette fonctionnalité est disponible uniquement dans la boîte de dialogue Indicateurs globaux.