Freigeben über


_RxAllocatePoolWithTag-Funktion

_RxAllocatePoolWithTag ordnet Arbeitsspeicher aus einem Pool mit einem Vier-Byte-Tag am Anfang des Blocks zu, das zum Abfangen von Instanzen des Speicherkorbs verwendet werden kann.

Syntax

VOID* _RxAllocatePoolWithTag(
   ULONG Type,
   ULONG Size,
   ULONG Tag,
   PSZ   FileName,
   ULONG LineNumber
);

Parameter

Typ
Der Typ des zu zuweisenden Pools. Dieser Parameter kann einer der folgenden Enumerationswerte für POOL_TYPE sein:

NonPagedPool
Nicht auslässiger Systemspeicher, auf den von jedem IRQL aus zugegriffen werden kann. Der NonPagedPool-Arbeitsspeicher ist eine knappe Ressource, die von Treibern nur bei Bedarf zugewiesen werden sollte. Das System kann puffern, die größer als PAGE_SIZE von NonPagedPool sind, nur in Vielfachen von PAGE_SIZE zuordnen. Anforderungen für Puffer, die größer als PAGE_SIZE, aber kein PAGE_SIZE mehreren, verschwenden nicht ausstellbaren Arbeitsspeicher.

PagedPool
Auslagerungsfähiger Systemspeicher, der nur bei IRQL < DISPATCH_LEVEL zugeordnet und zugegriffen werden kann.

Größe
Die Größe des zu zuweisenden Speicherblocks in Bytes.

Tag
Das Vier-Byte-Tag, das zum Markieren des zugeordneten Puffers verwendet werden soll. Eine Beschreibung der Verwendung von Tags finden Sie unter ExAllocatePoolWithTag. Der ASCII-Wert jedes Zeichens im Tag muss zwischen 0 und 127 sein.

FileName
Ein Zeiger auf den Quelldateinamen, in dem die Speicherzuordnung erfolgt ist. Dieser Parameter wird derzeit nicht verwendet.

LineNumber
Die Zeilennummer in der Quelldatei, in der die Speicherzuordnung erfolgt ist. Dieser Parameter wird derzeit nicht verwendet.

Rückgabewert

RxAllocatePoolWithTag gibt NULL zurück, wenn im freien Pool nicht genügend Arbeitsspeicher vorhanden ist, um die Anforderung zu erfüllen. Andernfalls gibt die Routine einen Zeiger auf den zugewiesenen Arbeitsspeicher zurück.

Hinweise

Es wird empfohlen, dass das RxAllocatePoolWithTag-Makro aufgerufen wird, anstatt diese Routine direkt zu verwenden. Bei Einzelhandelsbuilds ist dieses Makro so definiert, dass ExAllocatePoolWithTag aufgerufen wird. Bei aktivierten Builds wird dieses Makro definiert, um _RxAllocatePoolWithTag aufzurufen.

Die _RxAllocatePoolWithTag Routine ruft ExAllocatePoolWithTagPriority auf, wobei die Priorität (Wichtigkeit der Anforderung) auf LowPoolPriority festgelegt ist. Das System schlägt möglicherweise die Anforderung für LowPoolPriority fehl, wenn die Ressourcen knapp sind. Ein Treiber sollte bereit sein, bei verwendung dieser Routine eine Wiederherstellung nach einem Zuordnungsfehler durchzuführen.

Wenn das System einen Puffer aus dem Poolspeicher von PAGE_SIZE oder höher zuweist, richtet es den Puffer an einer Seitengrenze aus. Speicheranforderungen, die kleiner als PAGE_SIZE sind, sind nicht unbedingt an Seitengrenzen ausgerichtet, sondern passen immer auf eine einzelne Seite und werden an einer 8-Byte-Grenze ausgerichtet. Jede erfolgreiche Zuordnung, die einen Block anfordert, der größer als PAGE_SIZE ist, der kein Vielfaches von PAGE_SIZE ist, verschwendet alle nicht verwendeten Bytes auf der zuletzt zugewiesenen Seite.

Das System ordnet das Pooltag dem zugeordneten Arbeitsspeicher zu. Programmiertools, z. B. WinDbg, können das Pooltag anzeigen, das jedem zugeordneten Puffer zugeordnet ist. Der Wert von Tag wird normalerweise in umgekehrter Reihenfolge angezeigt. Wenn ein Aufrufer beispielsweise "Fred" als Tag übergibt, wird es als "derF" angezeigt, wenn Der Speicher gespeichert wird oder wenn die Speichernutzung im Debugger nachverfolgt wird.

Der mit _RxAllocatePoolWithTag zugewiesene Arbeitsspeicher sollte durch Aufrufen von _RxFreePool freigegeben werden.

Aufrufer von _RxAllocatePoolWithTag müssen unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Ein Aufrufer, der bei DISPATCH_LEVEL ausgeführt wird, muss einen NonPagedPool-Wert für den Type-Parameter angeben. Ein Aufrufer, der bei IRQL <= APC_LEVEL ausgeführt wird, kann einen beliebigen POOL_TYPE Wert für den Type-Parameter angeben.

Anforderungen

Zielplattform

Desktop

Header

Ntrxdef.h (einschließen von Ntrxdef.h)

IRQL

Weitere Informationen finden Sie im Abschnitt mit den Hinweisen.

Weitere Informationen

ExAllocatePoolWithTag

_RxCheckMemoryBlock

_RxFreePool