Poolzuordnung und kostenlose Routinen
RDBSS stellt eine Reihe von Routinen bereit, die für die Poolzuordnung verwendet werden können. Normalerweise werden diese Routinen mithilfe von Makros aufgerufen, nicht durch direktes Aufrufen dieser Routinen. Die Makros behandeln automatisch die Unterschiede zwischen Einzelhandels- und überprüften Builds.
Bei einem überprüften Build wurden diese Routinen entwickelt, um Wrapper um die normale Kernelzuordnung und freie Routinen hinzuzufügen. Diese Wrapper für die Poolzuordnung und freie Routinen stellen zusätzliche Debuginformationen bereit und rufen eine Reihe von Routinen auf, die verschiedene Arten von Überprüfungen und Schutzfunktionen ausführen, bevor die Kernelpoolzuordnung und freie Routinen aufgerufen werden. Diese Features sind jedoch derzeit nicht in diesen Zuordnungs- und kostenlosen Routinen implementiert, sondern können in zukünftigen Releases hinzugefügt werden.
Bei einem kostenlosen Build werden diese Routinen zu direkten Aufrufen der Kernelzuordnung und der freien Routinen ExAllocatePoolWithTag und ExFreePool.
In der folgenden Tabelle sind die RDBSS-Poolzuordnung und kostenlose Routinen aufgeführt.
-Routine zurückgegebener Wert | BESCHREIBUNG |
---|---|
Diese Routine ordnet Arbeitsspeicher aus einem Pool mit einem Vier-Byte-Tag am Anfang des Blocks zu, mit dem Speicherprobleme abfangen können. Es wird empfohlen, dass das RxAllocatePoolWithTag-Makro aufgerufen wird, anstatt diese Routine direkt zu verwenden. |
|
Diese Routine überprüft einen Speicherblock auf eine spezielle RX_POOL_HEADER Headersignatur. Beachten Sie, dass ein Netzwerk-Miniumleitungstreiber diesen speziellen Signaturblock dem zugewiesenen Arbeitsspeicher hinzufügen muss, um die Routine verwenden zu können. Diese Routine sollte nicht verwendet werden, da dieser spezielle Headerblock nicht implementiert wurde. |
|
Diese Routine gibt einen Speicherpool frei. Es wird empfohlen, dass das RxFreePool-Makro aufgerufen wird, anstatt diese Routine direkt zu verwenden. |
Mehrere Makros, die in der Headerdatei ntrxdef.h definiert sind, rufen diese Routinen auf. Anstatt die in der vorherigen Tabelle aufgeführten Routinen direkt aufzurufen, werden normalerweise die folgenden Makros verwendet.
Makro | Beschreibung |
---|---|
RxAllocatePoolWithTag (type, size, tag) |
Bei überprüften Builds weist dieses Makro Arbeitsspeicher aus einem Pool mit einem Vier-Byte-Tag am Anfang des Blocks zu, das beim Abfangen von Instanzen des Speicherausbruchs helfen kann. Bei Einzelhandelsbuilds wird dieses Makro zu einem direkten Aufruf von ExAllocatePoolWithTag. |
RxCheckMemoryBlock (ptr) |
Bei überprüften Builds überprüft dieses Makro einen Speicherblock auf eine spezielle RX_POOL_HEADER Headersignatur. Bei Einzelhandelsbuilds macht dieses Makro nichts. |
RxFreePool (ptr) |
Bei aktivierten Builds gibt dieses Makro einen Speicherpool frei. Bei Einzelhandelsbuilds wird dieses Makro zu einem direkten Aufruf von ExFreePool. |