Comment utiliser la fonctionnalité pool spécial pour isoler les dommages du pool

Traductions disponibles Traductions disponibles
Numéro d'article: 188831 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F188831
Agrandir tout | Réduire tout

Résumé

Pool endommagé peut provoquer les plus nombreux problèmes rencontrés sous Windows NT. Pool endommagé se produit lorsqu'un mode noyau composant écrit dans la mémoire en dehors de la zone pool alloué. En écrivant à mémoire au-delà des limites de sa zone attribuée, il est probable qu'un autre zone de mémoire allouée, pouvant appartenir à un autre composant, est remplacé. Ces dégâts peuvent entraîner des problèmes tels que des écrans bleus dans complètement indépendants zones de code. Un composant noyau lisant au-delà de sa zone attribuée peut également entraîner des problèmes.

Si elle est provoquée par l'équipement d'origine Pilotes de fabricants (OEM) ou des problèmes dans Windows, problèmes de pool endommagé sont Parmi les plus difficiles à identifier. En général, tout ce qui peut être constaté dans un analyse de vidage sur incident est le symptôme du problème réel, par exemple une zone de données devenir endommagés provoquant des problèmes dans un bloc de code complètement indépendant. Jusqu'à présent, il était pratiquement impossible de trouver le segment de code qui endommage la mémoire.

La source des dommages du pool peut maintenant être identifiée à l'instruction qui provoque l'endommagement du pool. Un nouvel utilitaire de gestion de mémoire qui est nommé Pool spécial est fourni avec Windows NT 4.0 Service Pack 4 (SP4) Windows 2000, Windows XP, Windows Server 2003, Windows Vista et Windows Server 2008. L'utilitaire Pool spécial identifie le composant en mode noyau qui endommage les données du pool en écrivant à mémoire en dehors de sa zone allouée.

Remarque : Réglage de la mémoire ne s'applique pas à Windows Vista et Windows Server 2008. Cependant la fonctionnalité pool spécial s'applique pour ces produits.

Plus d'informations

Important : Cette section, la méthode ou la tâche qui va suivre contient des étapes qui vous indiquent la méthode pour modifier le Registre de Windows. Toutefois, des problèmes sérieux peuvent survenir si vous modifiez le Registre de façon incorrecte. Par conséquent, assurez-vous de suivre ces étapes avec une attention toute particulière. Afin de couvrir votre système d'une protection supplémentaire, veuillez sauvegarder le Registre avant d'intervenir pour y apporter des modifications. Ainsi, si à la suite des modifications un problème devait survenir, vous pourrez toujours restaurer le Registre. Pour obtenir des informations sur la marche à suivre pour sauvegarder ou restaurer la Base de Registre, cliquez sur le lien (numéro) ci-dessous et afficher l'article correspondant dans la Base de connaissances Microsoft :
322756 Comment sauvegarder et restaurer le Registre dans Windows


L'utilitaire Pool spécial alloue deux pages de mémoire virtuelle pour chaque allocation de pool est demandée par l'intermédiaire de ExAllocatePoolWithTag qui correspond aux critères suivants :
  • La demande d'allocation doit être d'une taille inférieure à la allocation maximale qui tiendra dans une page de réserve.
  • La demande doit correspondre à la spécification PoolTag dans le Registre.
Pour la détection de dépassement de pool, la première page est utilisée pour contenir l'allocation à la fin de la page. La deuxième page est une page de garde. Pour détection de dépassement de réserve, la première page est la page de garde. Il est suivi par un page qui contient l'allocation au début de la page.

La détection de dépassement est probablement la plus utilisée. Pour la détection de saturation de la demande d'allocation est placée à la fin de la première page en sauvegardant le taille de la demande à partir de la fin de la page. La taille d'allocation est arrondie à un limite de 8 octets. Une clé de motif, la taille et les informations de balise de pool sont écrit dans l'en-tête sur les huit premiers octets de la première page. Le modèle est également propagée sur la page. Étant donné que l'allocation est placée sur le le plus proche de la limite de 8 octets, il peut y avoir jusqu'à sept octets restants suivant la allocation. Le motif est également écrit sur les octets restants suivant la allocation.

La deuxième page est la page de garde. La page de garde se compose d'une entrée de table de page spéciale (PTE) qui est marquée avec aucun accès protection. En marquant cette seconde page avec protection de non-accès, tout code Essayez de lire ou écrire au-delà de la fin de la première page immédiatement provoque une violation d'accès qui se traduit par un Stop 0x0000000A ou un message d'erreur Stop 0x0000001E. Cela permet un débogage du système pour rechercher l'instruction exacte qui provoque des dommages du pool.

Sous la forme d'une sauvegarde vérifie toute violation d'écriture au-delà de la fin de l'allocation mais pas au-delà de la fin de la page, les restants octets à la fin de l'allocation sont validés lors de la demande de pool de médias libre (ExFreePoolWithTag). Les octets restants sont comparés au motif dans le en-tête de l'allocation pour déterminer si tout ce qui est remplacé dans la zone d'octets restants. Si la vérification ne fonctionne pas, une erreur Stop 0x00000001A se produit.

Cette vérification ne trouve pas nécessairement le bloc exact de code qui provoque des dommages du pool. Toutefois, il peut aider à identifier le composant qui provoque la détérioration.

Pour activer l'utilitaire Pool spécial, ajoutez le clés et valeurs du Registre suivantes :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nom de la valeur: PoolTag
Type de données: REG_DWORD
Données: Masque de balise de pool | Masque taille allocation | 0
Le masque de balise de pool est l'ID de balise de pool qui contient le masquage caractères de la réserve dans laquelle vous souhaitez placer dans le pool spécial. Ce masque doit être spécifié au format hexadécimal dans l'ordre inverse. Ce masque peut également contenir des "?" pour masquer un seul caractère ou « * » au masque à partir d'ici à la fin de la balise. Par exemple, pour surveiller tous les pools avec une balise de pool qui commence par « Nt », spécifier « 2A744E » (sans les guillemets), qui représente « * tN ».

Le tableau suivant répertorie des exemples plus.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Spécification Masque taille d'allocation place toutes les allocations de pool de une taille spécifiée dans le pool spécial. Il est également spécifié au format hexadécimal. Par exemple, si toutes les allocations de 32 octets sont positionnées dans le pool spécial, Spécifiez 0 x 20.

Lorsque zéro (0 x 0) est spécifié, l'utilitaire Pool spécial n'est pas initialisé. En outre, l'utilitaire Pool spécial n'est pas initialisé si la valeur de Registre PoolTag n'est pas définie dans le Registre.
Nom de la valeur: PoolTagOverruns
Type de données: REG_DWORD
Données: 1 | 0
1 indique que les dépassements d'allocation de pool sont détectés pour le balise spécifiée. L'allocation est placée à la fin de la page et le module de protection page suit.

0 indique que les dépassements d'allocation de pool sont détectés pour le balise. L'allocation est placée au début de la page et la page de garde vient avant la page qui contient l'allocation.

Méthodes courantes pour créer ces deux clés de Registre se présente comme suit :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Nom de la valeur: PoolTag
Type de données: REG_DWORD
Données: 0x2A

Nom de la valeur: PoolTagOverruns
Type de données: REG_DWORD
Données: 1


Remarque : Pour Windows NT Terminal Server 4.0, vous devez désactiver KStackPool Lorsque vous utilisez un pool spécial. Pour ce faire, ajoutez la valeur de Registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Nom de la valeur: EnableKStackPool
Type de données: REG_DWORD
Données: 0

1 - KStackPool toujours activé
2 - KStack pool activé pour les ordinateurs ayant 256 Mo ou plus mémoire (par défaut)
Si vous n'effectuez pas cette modification sur Terminal Server Serveur ordinateurs 256 Mo ou plus de mémoire, vous pouvez recevoir « STOP 0 x 00000078 (PHASE0_EXCEPTION) "messages d'erreur.


Remarque : La fonctionnalité Pool spécial peut ne pas fonctionne dans Windows Server 2003 s'il existe des entrées de table insuffisants page spéciale (PTE). Ce problème se produit généralement sur des serveurs Terminal Server mono-utilisateur qui contiennent plus de 1 Go de RAM et qui ont les valeurs de réglage de gestion mémoire de l'ordinateur pour les valeurs par défaut. Ce problème ne se produit pas dans les versions 64 bits de Windows Server 2003.

Une analyse de fichier de vidage de mémoire du problème peut contenir les informations suivantes :
*** Virtual Memory Usage *** 
Physical Memory: 1015660 ( 4062640 Kb) 
Page File: \??\C:\Pagefile1\pagefile.sys 
Current: 4193280Kb Free Space: 4180856Kb 
Minimum: 4193280Kb Maximum: 4193280Kb 
Available Pages: 552680 ( 2210720 Kb) 
ResAvail Pages: 932179 ( 3728716 Kb) 
Locked IO Pages: 347 ( 1388 Kb) 
Free System PTEs: 187166 ( 748664 Kb) 
Free NP PTEs: 32765 ( 131060 Kb) 
Free Special NP: 117228 ( 468912 Kb) 
Modified Pages: 106 ( 424 Kb) 
Modified PF Pages: 98 ( 392 Kb) 
NonPagedPool Usage: 6599 ( 26396 Kb) 
NonPagedPool Max: 65536 ( 262144 Kb) 
PagedPool 0 Usage: 10697 ( 42788 Kb) 
PagedPool 1 Usage: 1240 ( 4960 Kb) 
PagedPool 2 Usage: 1239 ( 4956 Kb) 
PagedPool 3 Usage: 1265 ( 5060 Kb) 
PagedPool 4 Usage: 1231 ( 4924 Kb) 
PagedPool Usage: 15672 ( 62688 Kb) 
PagedPool Maximum: 90112 ( 360448 Kb) 
Shared Commit: 3866 ( 15464 Kb) 
Special Pool: 511 ( 2044 Kb) <-- very small
Shared Process: 5205 ( 20820 Kb) 
PagedPool Commit: 15672 ( 62688 Kb) 
Driver Commit: 2091 ( 8364 Kb) 
Committed pages: 439832 ( 1759328 Kb) 
Commit limit: 2023823 ( 8095292 Kb)

0: kd> dd nt!MmSpecialPoolRejected l8 
8057afe0 00000000 00000000 00b2e59a 00000000 <-- A DWORD value of 3 causes special pool PTE's shortage.
8057aff0 00000000 00000000 00000000 00000000

8057afd8 nt!MiSpecialPoolFirstPte = 0xc022af78
8057afd4 nt!MiSpecialPoolLastPte = 0xc022af78
Vous pouvez vérifier si le problème par la taille du Pool spécial qui est allouée à partir de l'analyse. Dans ce cas, le problème se produit car les valeurs PTE pool spécial suivantes sont égales :
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Ce problème peut également se produire si la valeur de l'entrée de Registre MmSpecialPoolRejected est de trois ou plus.

Pour contourner ce problème, configurez la valeur de l'entrée de Registre PagedPoolSize à une valeur qui est inférieure à la taille de réserve paginée est autorisée. Par exemple, définissez l'entrée de Registre PagedPoolSize à une valeur de 256 Mo. Si vous souhaitez configurer une plus grande valeur, utilisez l'utilitaire d'analyseur de performances pour déterminer les besoins de l'ordinateur pour une plus grande taille de pool paginé.

Vous pouvez utiliser les valeurs suivantes pour l'entrée de Registre PagedPoolSize :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Pour Windows Server 2003 sans service pack :

Nom de la valeur: PagedPoolSize
Type de données: REG_DWORD
Données: 10000000
Base : hexadécimal

Pour Windows Server 2003 avec Service Pack 1 (SP1) :

Nom de la valeur: PagedPoolSize
Type de données: REG_DWORD
Données: FFFFFFFF
Base : hexadécimal

Remarque : Après avoir effectué les modifications du Registre qui sont décrites dans ce l'article, redémarrez l'ordinateur pour que ces modifications prennent effet.

If Après avoir activé la fonctionnalité Pool spécial, l'ordinateur cesse de répondre (se bloque), et que vous recevez un message d'erreur sur un écran bleu lors du démarrage, redémarrez le ordinateur à l'aide de l'option dernière bonne Configuration connue. Activation de la fonctionnalité Pool spécial n'est pas écrit à la dernière vérifié Entrée de configuration dans le Registre qu'après une ouverture de session.

Propriétés

Numéro d'article: 188831 - Dernière mise à jour: vendredi 19 avril 2013 - Version: 0.1
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows XP Professional
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista Édition Familiale Premium
  • Windows Vista Entreprise
  • Windows Vista Édition Intégrale
  • Windows Vista Service Pack 2
  • Windows Server 2008 Standard
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Service Pack 2
  • Windows 7 Édition Familiale Premium
  • Windows 7 Entreprise
  • Windows 7 Professionnel
  • Windows 7 Édition Integrale
  • Windows 7 Service Pack 1
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Service Pack 1
Mots-clés : 
kbenv kbhowto kbqfe kbmt KB188831 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu d'une traduction automatique réalisée par un logiciel Microsoft et non par un traducteur professionnel. Cette traduction automatique a pu aussi être révisée par la communauté Microsoft grâce à la technologie Community Translation Framework (CTF). Pour en savoir plus sur cette technologie, veuillez consulter la page http://support.microsoft.com/gp/machine-translation-corrections/fr. Microsoft vous propose en effet des articles traduits par des professionnels, des articles issus de traductions automatiques et des articles issus de traductions automatiques révisées par la communauté Microsoft, de manière à ce que vous ayez accès à tous les articles de notre Base de connaissances dans votre langue. Il est important de noter que les articles issus de la traduction automatique, y compris ceux révisés par la communauté Microsoft, peuvent contenir des erreurs de vocabulaire, de syntaxe ou de grammaire. Microsoft ne pourra être tenu responsable des imprécisions, erreurs, ainsi que de tout dommage résultant d?une traduction incorrecte du contenu ou de son utilisation par les clients.
La version anglaise de cet article est la suivante: 188831
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com