Spezieller Pool
Das Feature "Spezieller Pool " konfiguriert Windows so, dass Speicherbelegungen aus einem reservierten Speicherpool angefordert werden, wenn der Arbeitsspeicher mit einem angegebenen Pooltag belegt ist oder sich innerhalb eines angegebenen Größenbereichs befindet.
Abkürzung |
Spp |
Hexadezimalwert |
(Keine) |
Symbolischer Name |
(Keine) |
Ziel |
Systemweiter Registrierungseintrag (Windows Vista und höher) Systemweiter Registrierungseintrag, Kernelflag |
Auswählen eines Pooltags
Wenn Sie einen speziellen Pool für ein bestimmtes Pooltag anfordern, stellen Sie sicher, dass Ihr Treiber oder ein anderes Kernelmodusprogramm ein eindeutiges Pooltag verwendet.
Außerdem sollten Sie beim Erstellen eines Pooltags (z. B. mithilfe von ExAllocatePoolWithTag) die Tagzeichen in umgekehrter Reihenfolge eingeben. Wenn das Tag beispielsweise Fred ist, sollten Sie es als derF (0x64657246) eingeben. Pooltags werden in der Registrierung gespeichert und im Debugger und anderen Tools in umgekehrter Reihenfolge (lower endian) angezeigt. Wenn Sie sie in umgekehrter Reihenfolge eingeben, werden sie in Vorwärtsreihenfolge (0x46726564) angezeigt.
Wenn Sie vermuten, dass Ihr Treiber den gesamten speziellen Pool nutzt, sollten Sie mehrere Pooltags in Ihrem Code verwenden. Anschließend können Sie Ihren Treiber mehrmals testen und in jedem Test einen speziellen Pool zu einem Pooltag zuweisen.
Wählen Sie außerdem ein Pooltag mit einem Hexadezimalwert aus, der größer als die Seitengröße des Systems ist. Wenn Sie für Kernelmoduscode ein Pooltag eingeben, das einen Wert kleiner als PAGE_SIZE hat, fordert Gflags einen speziellen Pool für alle Zuordnungen an, deren Größe innerhalb des entsprechenden Bereichs liegt, und fordert einen speziellen Pool für Zuordnungen mit einem entsprechenden Pooltag an. Wenn Sie beispielsweise eine Größe von 30 auswählen, wird ein spezieller Pool für alle Zuordnungen zwischen 17 und 32 Bytes und für Zuordnungen mit dem Pooltag 0x0030 verwendet.
Auswählen einer Zuordnungsgröße
Verwenden Sie die folgenden Richtlinien, um eine Zuordnungsgröße für das Feature "Spezieller Pool" auszuwählen.
Auf einem Computer mit einem x86-Prozessor ist PAGE_SIZE 0x1000, und die Zuordnungsgrößenbereiche sind 8 Byte lang. Um das Feature "Spezieller Pool" für alle Zuordnungen mit Größen in diesem Bereich zu konfigurieren, geben Sie eine Zahl ein, die dem Maximum dieses Bereichs plus 8 entspricht. (Diese Zahl ist immer ein Vielfaches von 8.) Die folgende Tabelle veranschaulicht diese Werte:
Größenbereich | Geben Sie diese Nummer ein. |
---|---|
1 bis 8 Bytes |
10 (dezimal 16) |
9 bis 16 Bytes |
18 (Dezimalzahl 24) |
17 bis 24 Bytes |
20 (dezimal 32) |
... |
... |
0xFE9 zu 0xFF0 Bytes |
FF8 (dezimal 4088) |
Auf einem Computer mit einem AMD x86-64-Prozessor ist PAGE_SIZE 0x1000, und die Zuordnungsgrößenbereiche sind 16 Byte lang. Um das Feature "Spezieller Pool" für alle Zuordnungen mit Größen in diesem Bereich zu konfigurieren, geben Sie eine Zahl ein, die dem Maximum dieses Bereichs plus 16 entspricht. (Diese Zahl ist immer ein Vielfaches von 16.) Die folgende Tabelle veranschaulicht diese Werte:
Größenbereich | Geben Sie diese Nummer ein. |
---|---|
1 bis 16 Bytes |
20 (dezimal 32) |
17 bis 32 Bytes |
30 (dezimal 48) |
33 bis 48 Bytes |
40 (dezimal 64) |
... |
... |
0xFD1 zu 0xFE0 Bytes |
FF0 (dezimal 4080) |
Auf einem Computer mit einem beliebigen Prozessor können Sie ein Sternchen ( * ) oder einen 0x2A (Dezimalwert 42) verwenden, um die Funktion "Spezieller Pool" für alle Speicherbelegungen im System zu konfigurieren.
Kommentare
Informationen zum Konfigurieren des Features "Spezieller Pool" im Dialogfeld "Globale Flags" finden Sie unter Konfigurieren eines speziellen Pools. Informationen zum Konfigurieren des Features "Spezieller Pool" in der Befehlszeile finden Sie unter GFlags-Befehle. Ein Beispiel finden Sie unter Beispiel 14: Konfigurieren eines speziellen Pools.
Das Feature "Spezieller Pool" von Gflags weist Windows an, Speicherbelegungen aus einem reservierten Speicherpool anzufordern, wenn der Arbeitsspeicher mit einem angegebenen Pooltag belegt wird oder sich innerhalb eines angegebenen Größenbereichs befindet. Um einen speziellen Pool für alle Zuordnungen eines bestimmten Treibers anzufordern, verwenden Sie Driver Verifier. Weitere Informationen finden Sie im Thema "Spezieller Pool" im Abschnitt "Driver Verifier" des Windows Driver Kit (WDK).
Die speziellen Poolfunktionen von Gflags und Driver Verifier helfen Ihnen, die Fehlerquelle bei der Verwendung des Kernelpools zu erkennen und zu identifizieren, z. B. Schreiben über den zugewiesenen Speicherplatz hinaus oder verweisen auf bereits freigegebenen Arbeitsspeicher.
Nicht alle speziellen Poolanforderungen werden erfüllt. Jede Zuordnung aus dem speziellen Pool verwendet eine Seite mit nicht ausgelagertem physischen Speicher und zwei Seiten mit virtuellem Adressraum. Wenn der spezielle Pool erschöpft ist, wird der Arbeitsspeicher aus dem Standardpool zugewiesen, bis der spezielle Pool wieder verfügbar ist. Wenn eine spezielle Poolanforderung aus dem Standardpool ausgefüllt wird, gibt die anfordernde Funktion einen erfolgreichen status zurück. Es wird kein Fehler zurückgegeben, da die Zuordnung erfolgreich war, obwohl sie nicht aus einem speziellen Pool gefüllt wurde.
Die Größe des speziellen Pools nimmt mit der Menge des physischen Arbeitsspeichers auf dem System zu. Im Idealfall sollte dies mindestens 1 Gigabyte (GB) betragen. Verwenden Sie auf x86-Computern nicht die Startoption /3GB , wenn sie einen speziellen Pool verwenden, da virtueller (zusätzlich zum physischen) Speicherplatz belegt wird. Es ist auch eine gute Idee, die Mindest-/Höchstmengen der Seitendatei um den Faktor zwei oder drei zu erhöhen.
Sie können auch das Feature "Spezieller Pool" so konfigurieren, dass die Speicherbelegung so ausgerichtet wird, dass Verweise auf arbeitsspeicher vor der Zuordnung ("Unterläufe") oder Verweise auf Arbeitsspeicher außerhalb der Zuordnung ("Overruns") erkannt werden. Dieses Feature ist nur im Dialogfeld Globale Flags in allen Versionen von Windows verfügbar. Weitere Informationen finden Sie unter Erkennen von Überschreitungen und Unterläufen.
Unter Windows Vista und höheren Versionen von Windows können Sie das Feature "Spezieller Pool" als Registrierungseinstellung konfigurieren, die einen Neustart erfordert, aber wirksam bleibt, bis Sie sie ändern, oder als Kernelflagseinstellung, die keinen Neustart erfordert, sondern nur wirksam ist, bis Sie Windows neu starten oder herunterfahren. In früheren Versionen von Windows ist special pool nur als Registrierungseinstellung verfügbar.
Unter Windows Vista und höheren Versionen von Windows können Sie das Feature "Spezieller Pool" entweder über das Dialogfeld Globale Flags oder über die Befehlszeile konfigurieren. In früheren Versionen von Windows ist dieses Feature nur im Dialogfeld Globale Flags verfügbar.