ExAllocatePoolWithQuota-Funktion (wdm.h)

Warnung

Die ExAllocatePoolWithQuota-Routine ist veraltet und wurde in Windows 10 Version 2004 veraltet und durch ExAllocatePool2 ersetzt. Weitere Informationen finden Sie unter Aktualisieren veralteter ExAllocatePool-Aufrufe an ExAllocatePool2 und ExAllocatePool3.

Verwenden Sie beim Entwickeln von Treibern für windows-Versionen vor Windows 10 Version 2004 ExAllocatePoolQuotaZero.

ExAllocatePoolWithQuota weist Poolspeicher zu, wobei das Kontingent für den aktuellen Prozess abgerechnet wird.

Syntax

PVOID ExAllocatePoolWithQuota(
  [in] __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  [in] SIZE_T                                         NumberOfBytes
);

Parameter

[in] PoolType

Gibt den Typ des zuzuweisenden Poolspeichers an. Eine Beschreibung der verfügbaren Poolspeichertypen finden Sie unter POOL_TYPE.

Sie können PoolType ändern, indem Sie ein bitweises OR mit dem POOL_COLD_ALLOCATION-Flag als Hinweis an den Kernel verwenden, um den Arbeitsspeicher von Seiten zuzuweisen, die wahrscheinlich schnell ausgelagert werden. Um den Speicher des residenten Pools so weit wie möglich zu reduzieren, sollten Sie nicht häufig auf diese Zuordnungen verweisen. Das Flag POOL_COLD_ALLOCATION ist nur ein Hinweis und für Windows XP und höhere Versionen des Windows-Betriebssystems verfügbar.

[in] NumberOfBytes

Legt die Anzahl der zuzuweisenden Bytes fest.

Rückgabewert

ExAllocatePoolWithQuota gibt einen Zeiger auf den zugeordneten Pool zurück.

Wenn die Anforderung nicht erfüllt werden kann, löst ExAllocatePoolWithQuota eine Ausnahme aus.

Hinweise

Diese Routine wird von Treibern der höchsten Ebene aufgerufen, die Arbeitsspeicher zuweisen, um eine Anforderung im Kontext des Prozesses zu erfüllen, der ursprünglich die E/A-Anforderung gestellt hat. Treiber auf niedrigerer Ebene rufen stattdessen ExAllocatePoolWithTag auf.

Wenn NumberOfBytes PAGE_SIZE oder höher ist, wird ein seitenorientierter Puffer zugewiesen. Das Kontingent wird dem Prozess für Zuordnungen von PAGE_SIZE oder höher nicht in Rechnung gestellt.

Speicherzuordnungen von weniger als PAGE_SIZE werden innerhalb einer Seite zugeordnet und überschreiten keine Seitengrenzen. Speicherzuordnungen von PAGE_SIZE oder weniger sind nicht unbedingt seitenbündig, sondern an 8-Byte-Grenzen in 32-Bit-Systemen und an 16-Byte-Grenzen in 64-Bit-Systemen ausgerichtet.

Legen Sie NumberOfBytes = 0 nicht fest. Vermeiden Sie Zuweisungen der Länge null, da sie Speicherplatz im Poolheader verschwenden und in vielen Fällen auf ein potenzielles Validierungsproblem im aufrufenden Code hinweisen. Aus diesem Grund kennzeichnet Driver Verifier solche Zuordnungen als mögliche Fehler.

Das System legt automatisch bestimmte Standardereignisobjekte fest, wenn die Anzahl des Pools (ausgelagert oder nicht ausgelagert) hoch oder niedrig ist. Treiber können warten, bis diese Ereignisse ihre Poolnutzung optimieren. Weitere Informationen finden Sie unter Standardereignisobjekte.

Der von ExAllocatePoolWithQuota zugewiesene Arbeitsspeicher ist nicht initialisiert. Ein Kernelmodustreiber muss diesen Arbeitsspeicher zuerst null, wenn er für Software im Benutzermodus sichtbar macht (um zu vermeiden, dass potenziell privilegierte Inhalte verloren gehen).

Aufrufer von ExAllocatePoolWithQuota müssen unter IRQL <= DISPATCH_LEVEL ausgeführt werden. Ein Aufrufer, der bei DISPATCH_LEVEL ausgeführt wird, muss einen NonPagedXxx-Wert für PoolType angeben. Ein Aufrufer, der mit IRQL <= APC_LEVEL ausgeführt wird, kann einen beliebigen POOL_TYPE Wert angeben, aber auch die IRQL und die Umgebung müssen für die Bestimmung des Pooltyps berücksichtigt werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Veraltet. Diese Routine wird nur für vorhandene Treiberbinärdateien exportiert. Verwenden Sie stattdessen ExAllocatePoolWithQuotaTag.
Zielplattform Universell
Header wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (siehe Abschnitt Hinweise)
DDI-Complianceregeln HwStorPortProhibitedDDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf)

Weitere Informationen

ExAllocatePoolWithQuotaTag

ExAllocatePoolWithTag

ExFreePool

POOL_TYPE