ExAllocatePoolWithQuota-Funktion (wdm.h)
Warnung
Die ExAllocatePoolWithQuota Routine ist veraltet und wurde in Windows 10, Version 2004, veraltet und wurde durch ExAllocatePool2ersetzt. Weitere Informationen finden Sie unter Aktualisieren veralteter ExAllocatePool-Aufrufe an ExAllocatePool2 und ExAllocatePool3.
Verwenden Sie beim Entwickeln von Treibern für die Windows-Version vor Windows 10, Version 2004, ExAllocatePoolQuotaZero.
ExAllocatePoolWithQuota ordnet Poolspeicher zu, ladekontingent für den aktuellen Prozess.
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 ODER mit dem POOL_COLD_ALLOCATION Flag als Hinweis auf den Kernel verwenden, um den Speicher 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 empfehlungsspezifisch und steht für Windows XP und höhere Versionen des Windows-Betriebssystems zur Verfügung.
[in] NumberOfBytes
Gibt die Anzahl der zuzuordnenden Bytes an.
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.
Bemerkungen
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 vorgenommen hat. Treiber auf niedrigerer Ebene rufen stattdessen ExAllocatePoolWithTag- auf.
Wenn NumberOfBytes- PAGE_SIZE oder höher ist, wird ein Seitenausrichtungspuffer zugewiesen. Das Kontingent wird dem Prozess für Zuordnungen von PAGE_SIZE oder höher nicht berechnet.
Speicherzuweisungen von weniger als PAGE_SIZE werden innerhalb einer Seite zugewiesen und überschreiten keine Seitengrenzen. Speicherzuordnungen von PAGE_SIZE oder weniger werden nicht notwendigerweise seitenbündig ausgerichtet, sondern in 32-Bit-Systemen und 16-Byte-Begrenzungen in 64-Bit-Systemen ausgerichtet.
Legen Sie NumberOfBytes- = 0 nicht fest. Vermeiden Sie Zuweisungen der Länge Null, da sie Platz für den Poolkopf verschwenden und in vielen Fällen ein potenzielles Überprüfungsproblem im aufrufenden Code angeben. Aus diesem Grund Driver Verifier solche Zuordnungen als mögliche Fehler kennzeichnen.
Das System legt automatisch bestimmte Standardereignisobjekte fest, wenn die Menge 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 Standard-Ereignisobjekte.
Speicher, der ExAllocatePoolWithQuota zugeordnet wird, wird nicht initialisiert. Ein Kernelmodustreiber muss zuerst diesen Speicher null sein, wenn er für Software im Benutzermodus sichtbar macht (um zu vermeiden, dass potenziell privilegierte Inhalte verloren gehen).
Aufrufer von ExAllocatePoolWithQuota müssen bei IRQL <= DISPATCH_LEVEL ausgeführt werden. Ein Aufrufer, der bei DISPATCH_LEVEL ausgeführt wird, muss einen NonPaged-Xxx- wert für PoolType-angeben. Ein Aufrufer, der bei IRQL <= APC_LEVEL ausgeführt wird, kann einen beliebigen POOL_TYPE Wert angeben, aber die IRQL und Umgebung müssen auch zum Bestimmen des Pooltyps berücksichtigt werden.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Obsolet. Diese Routine wird nur für vorhandene Treiberbinärdateien exportiert. Verwenden Sie stattdessen ExAllocatePoolWithQuotaTag. |
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Classpnp.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise") |
DDI-Complianceregeln | HwStorPortProhibitedDIs(storport), SpNoWait(storport), StorPortStartIo(storport), UnsafeAllocatePool(kmdf) |