Verwendung von der speziellen Poolfunktion zum Poolschäden

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 188831 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Zusammenfassung

Poolschäden möglicherweise viele der am häufigsten verursachen. verschleierter Probleme mit Windows NT Poolschäden wird verursacht, wenn ein Kernel-Modus Komponente schreibt in den Speicher außerhalb der zugewiesenen Pool-Bereich. Indem Sie schreiben Speicher außerhalb der Begrenzung des zugewiesenen Bereichs, ist es wahrscheinlich, dass eine andere Bereich des zugeordneten Speichers, die möglicherweise von einer anderen Komponente besessen wird überschrieben. Diese können Probleme wie Bluescreens in Schaden überhaupt Codebereiche. Eine Kernelmoduskomponente außerhalb ihres zugewiesenen lesen kann. auch zu führen Sie Problemen.

Gibt an, ob er durch Erstausrüstung verursacht wird Hersteller (OEM)-Treiber oder Probleme in Windows sind Pool Beschädigung Probleme Einige der am schwierigsten zu identifizieren. In der Regel, alles, was kann man in einem Crash-Dump-Analyse ist das Symptom des eigentlichen Problems, z. B. einem Datenbereich immer beschädigt und verursachen Probleme in einen vollständig unabhängigen Codeblock. Bis jetzt war es fast unmöglich, durch das Codesegment finden die Schäden des Speichers.

Die Quelle der Poolschäden kann jetzt identifiziert werden mit der Anweisung, die den Poolschaden verursacht. Ein neuer Speicher-Management-Dienstprogramm d. h. benannte spezieller Pool ist im Lieferumfang von Windows NT 4.0 Service Pack 4 (SP4), Windows 2000 Windows XP, WindowsServer 2003, Windows Vista und WindowsServer 2008. Das Dienstprogramm spezieller Pool identifiziert die Kernel-Modus-Komponente, die Pool-Daten schädlich ist, indem Sie schreiben Speicher außerhalb der zugewiesenen Bereich.

Hinweis Speicheroptimierung gilt nicht für Windows Vista und Windows Server 2008. Jedoch gilt der speziellen Poolfunktion für diese Produkte.

Weitere Informationen

Wichtig: Dieser Abschnitt, die Methode oder die Aufgabe enthält Schritte, die erklären, wie Sie die Windows-Registry ändern. Es können schwerwiegende Probleme auftreten, wenn Sie die Windows-Registry falsch ändern. Stellen Sie daher sicher, dass Sie die folgenden Schritte sorgfältig ausführen. Für zusätzlichen Schutz sichern Sie die Registrierung, bevor Sie Änderungen vornehmen. Gegebenenfalls können Sie dann die Registrierung wiederherstellen, wenn ein Problem auftritt. Für Weitere Informationen zum Sichern und Wiederherstellen der Registrierung, klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
322756 Sichern und Wiederherstellen der Registrierung in Windows


Die speziellen Pool-Dienstprogramm weist zwei Seiten des virtuellen Speichers für jede Pool-Zuweisung, die angefordert wird durch ExAllocatePoolWithTag entspricht, die die folgenden Kriterien:
  • Die Zuordnungsanforderung muß für eine geringere Größe als die Maximale Zuweisungen, die in einem Poolauslagerungsseite passen.
  • Die Anforderung muss der PoolTag Spezifikation entsprechen in der Registrierung.
Für die Erkennung von Pufferüberlauf Pool wird die erste Seite verwendet, um enthalten die Aufteilung am Ende der Seite. Die zweite Seite ist eine Schutzseite. Für Unterfahrschutz Pool-Erkennung, die erste Seite ist die Schutzseite. Es folgt ein Seite, die die Zuordnung am Anfang der Seite enthält.

Pufferüberlauf-Erkennung ist das am häufigsten verwendete. Für die Erkennung von Pufferüberlauf die angeforderte Zuordnung befindet sich am Ende der ersten Seite durch das Sichern der Größe der Anforderung am Ende der Seite. Die Zuordnungsgröße gerundet wird, bis zu einer 8-Byte-Grenze. Ein Muster-Schlüssel, die Größe und die Pool-Tag-Informationen sind in der Kopfzeile der ersten acht Bytes der ersten Seite geschrieben. Das Muster wird auch über die gesamte Seite weitergegeben werden. Da die Zuordnung auf positioniert ist die Nächste 8-Byte-Grenze, möglicherweise bis zu sieben Schmutzwasser Bytes nach der die Zuordnung. Das Muster bezieht sich auch auf die folgenden Schmutzwasser Bytes der die Zuordnung.

Die zweite Seite ist die Schutzseite. Die Schutzseite besteht aus einer speziellen Page Table Entry (PTE), die mit kein Zugriff Schutz. Durch Markieren dieses zweiten Seite mit kein Zugriff Schutz, code Versuch, Lese- oder Schreibvorgang wird darüber hinaus das Ende der ersten Seite sofort eine Zugriffsverletzung, die einen Stop 0x0000000A oder Stop 0x0000001E Fehler führt. Auf diese Weise können ereignisspezifische System um genaue Anweisungen zu finden die bewirkt, dass Poolschäden.

Sicherung überprüfen können Zuwiderhandlungen abzufangen, die schreiben nach dem Ende der Zuweisung jedoch nicht hinter dem Ende der Seite die Schmutzwasser Bytes am Ende der Reservierung werden während der freien Pool-Anforderung überprüft. (ExFreePoolWithTag). Die Bytes Schmutzwasser sind im Vergleich zu dem Muster in der Zuweisung Header bestimmen, ob alles andere wird im Bereich Byte Schmutzwasser überschrieben. Wenn die Überprüfung funktioniert nicht, einen Abbruchfehler 0x00000001A Tritt auf.

Diese Prüfung findet nicht unbedingt den genauen Block von Code, der Poolschäden zur Folge hat. Allerdings kann es hilfreich sein, die Komponente zu identifizieren. die bewirkt, dass den Schaden.

Um das Dienstprogramm spezieller Pool zu aktivieren, fügen die folgenden Schlüssel und Werte in der Registrierung:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Wertname: PoolTag
Datentyp: REG_DWORD
Daten: Pool Tag Maske | Größenmaske Zuweisung | 0
Die Pool-Tag-Maske ist die Pool-Tag-ID, die Maskierung enthält Zeichen des Pools, in dem Sie in den speziellen Pool setzen möchten. Diese Maske muss im Hexadezimalformat in umgekehrter Reihenfolge angegeben werden. Diese Maske kann auch enthalten. "?" auf ein einzelnes Zeichen zu maskieren oder "*" Maske von hier bis zum Ende des Tags. Geben Sie z. B. zum Überwachen aller Pools mit einem Pool-Tag, die mit "Nt" beginnt "2A744E" (ohne Anführungszeichen) ein, womit "* tN".

Die in der folgenden Tabelle werden weitere Beispiele.
   Pool to monitor   Character representation   Pool tag mask
   ----------------------------------------------------------               
   All pools         "*"                        0x2A
   N??s              "s??N"                     0x733F3F4E
				
Zuweisung Größenangabe Maske platziert alle Poolzuweisungen des eine bestimmte Größe in den speziellen Pool. Dies wird auch im Hexadezimalformat angegeben. Wenn beispielsweise alle Zuordnungen von 32 Byte in speziellen Pool positioniert sind, Geben Sie 0 x 20.

Wenn NULL (0 x 0) angegeben ist, das Dienstprogramm spezieller Pool ist nicht initialisiert. Darüber hinaus ist das Dienstprogramm spezieller Pool nicht wenn initialisiert der Registrierungswert PoolTag ist nicht in der Registrierung definiert.
Wertname: PoolTagOverruns
Datentyp: REG_DWORD
Daten: 1 | 0
1 bedeutet, dass die Überschreitungen der Pool-Zuweisung für erkannt werden die -Tag angegeben. Die Zuordnung befindet sich am Ende der Seite und den Wächter Seite folgt.

0 bedeutet, dass der Pool-Zuweisung Unterläufen von erkannt werden die -Tag. Die Zuordnung befindet sich am Anfang der Seite und die Schutzseite steht vor der Seite, die Zuordnung enthält.

Beispiele für Verwendung dieser zwei Registrierungsschlüssel erstellen würde wie folgt aussehen:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\ Memory Management


Wertname: PoolTag
Datentyp: REG_DWORD
Daten: 0x2A

Wertname: PoolTagOverruns
Datentyp: REG_DWORD
Daten: 1


Hinweis Für Windows NT Terminal Server 4.0 müssen Sie die KStackPool deaktivieren. Wenn Sie die speziellen Pool verwenden. Fügen Sie hierzu den folgenden Registrierungswert hinzu:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management


Wertname: EnableKStackPool
Datentyp: REG_DWORD
Daten: 0

1 - KStack-Pool immer aktiviert
2 - KStack-Pool aktiviert bei Computern mit mindestens 256 MB Speicher (Standard)
Wenn Sie diese Änderung nicht auf Terminal treffen Servercomputern, die 256 MB oder mehr Speicherplatz verfügen, erhalten Sie "STOP 0x00000078 (PHASE0_EXCEPTION) "Error Messages.


Hinweis Der speziellen Poolfunktion funktioniert nicht in Windows Server 2003, wenn nicht genügend spezielle Page Table Entries (PTEs) vorhanden sind. Dieses Problem tritt normalerweise auf Single-User-Terminalservern, enthalten mehr als 1 GB RAM und, die Speicher-Management tuning Werte des Computers auf Standardwerte festgelegt haben. Dieses Problem tritt nicht in 64-Bit-Versionen von Windows Server 2003.

Eine Speicher-Dump-Datei-Analyse des Problems kann die folgende Informationen enthalten:
*** 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
Sie können das Problem durch die Größe des speziellen Pools überprüfen, die aus der Analyse zugeordnet ist. In diesem Fall tritt das Problem, da die folgenden speziellen Pool PTE-Werte gleich sind:
  • MiSpecialPoolFirstPte
  • MiSpecialPoolLastPte
Dieses Problem kann auch auftreten, wenn der Wert des Registrierungseintrags MmSpecialPoolRejected drei ist oder mehr.

Um dieses Problem zu umgehen, konfigurieren Sie den Wert des Registrierungseintrags "PagedPoolSize" auf einen Wert, der kleiner als die Größe des Auslagerungsspeichers befindet, die berechtigt ist. Beispielsweise legen Sie den Registrierungseintrag "PagedPoolSize" auf einen Wert 256 MB. Wenn Sie einen größeren Wert konfigurieren möchten, verwenden Sie das Systemmonitor-Dienstprogramm des Computers-Anforderung für eine größere Größe des Auslagerungsspeichers bestimmen.

Sie können die folgenden Werte für den Registrierungseintrag "PagedPoolSize" verwenden:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Für Windows Server 2003 ohne Servicepack:

Wertname: "PagedPoolSize"
Datentyp: REG_DWORD
Daten: 10000000
Basis: Hexadezimal

Für Windows Server 2003 mit Service Pack 1 (SP1) installiert:

Wertname: "PagedPoolSize"
Datentyp: REG_DWORD
Daten: FFFFFFFF
Basis: Hexadezimal

Hinweis Nachdem Sie die Registrierungsänderungen vornehmen, die beschrieben werden in diesem Artikel, starten Sie den Computer dazu führen, dass die Änderungen wirksam werden.

If Nachdem Sie die speziellen Pool-Funktion aktivieren, reagiert der Computer nicht mehr (hängt), und Sie erhalten eine Fehlermeldung auf einem blauen Bildschirm beim Starten, starten Sie den Computer mit die Option letzte als funktionierend bekannte Konfiguration. Aktivieren der speziellen Poolfunktion wird nicht auf die letzte zweifelsfrei funktionierende geschrieben Der Konfigurationseintrag in der Registrierung erst nach der erfolgreichen Anmeldung.

Eigenschaften

Artikel-ID: 188831 - Geändert am: Freitag, 19. April 2013 - Version: 0.1
Die Informationen in diesem Artikel beziehen sich auf:
  • 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 Home Premium
  • Windows Vista Enterprise
  • Windows Vista Ultimate
  • 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 Home Premium
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • 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
Keywords: 
kbenv kbhowto kbqfe kbmt KB188831 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell übersetzt und wird dann möglicherweise mithilfe des Community Translation Framework (CTF) von Mitgliedern unserer Microsoft Community nachbearbeitet. Weitere Informationen zu CTF finden Sie unter http://support.microsoft.com/gp/machine-translation-corrections/de.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 188831
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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