Freigeben über


ExAllocatePoolZero-Funktion (wdm.h)

Achtung

Microsoft ist sich eines Problems mit ExAllocatePoolZero bewusst, das dazu führen kann, dass eine Zuordnung unter Windows 10, Version 1909, nicht auf Null gesetzt wird. Dieses Problem wurde in einer Sicherheitsaktualisierung des WDK für Windows 10, Version 2004 und des Enterprise WDK (EWDK) für Windows 10, Version 2004, am 16. Dezember 2020 behoben. Informationen zum Herunterladen des neuesten WDK finden Sie unter Herunterladen des Windows Driver Kit (WDK).

Diese Routine ist ein Wrapper für und eine empfohlene Ersatzoption für ExAllocatePoolWithTag.

ExAllocatePoolZero weist den Poolspeicher des angegebenen Typs zu und gibt einen Zeiger auf den zugeordneten Block zurück. Er ist identisch mit ExAllocatePoolWithTag , aber null initialisiert den zugeordneten Arbeitsspeicher.

Syntax

PVOID ExAllocatePoolZero(
  __drv_strictTypeMatch(__drv_typeExpr)POOL_TYPE PoolType,
  SIZE_T                                         NumberOfBytes,
  ULONG                                          Tag
);

Parameter

PoolType

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

Sie können den Enumerationswert ändern, indem Sie einen bitweisen OR mit dem in wdm.hdefinierten POOL_RAISE_IF_ALLOCATION_FAILURE-Flag ausführen. Dieses Flag bewirkt, dass eine Ausnahme ausgelöst wird, wenn die Anforderung nicht erfüllt werden kann. Die Verwendung dieses Flags wird nicht empfohlen, da es teuer ist.

Auf ähnliche Weise können Sie den PoolType-Wert ändern, indem Sie bitweise diesen Wert mit dem POOL_COLD_ALLOCATION-Flag (auch definiert in wdm.h) als Hinweis an den Kernel ändern, um den Arbeitsspeicher aus 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 POOL_COLD_ALLOCATION-Flag ist nur ein Hinweis.

NumberOfBytes

Die Anzahl der zu belegenden Bytes.

Tag

Das Pooltag, das für den zugewiesenen Arbeitsspeicher verwendet werden soll. Geben Sie das Pooltag als Zeichenliteral ungleich 0 von 1 bis vier Zeichen an, Tag1die durch einzelne Anführungszeichen getrennt sind (z. B. ). Die Zeichenfolge wird normalerweise in umgekehrter Reihenfolge angegeben (z. B. 1gaT). Jedes ASCII-Zeichen im Tag muss ein Wert im Bereich 0x20 (Leerzeichen) bis 0x7E (Tilde) sein. Jeder Zuordnungscodepfad sollte ein eindeutiges Pooltag verwenden, um Debuggern und Prüfern beim Identifizieren des Codepfads zu helfen.

Rückgabewert

ExAllocatePoolZero 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

Diese Routine wird für die allgemeine Poolzuordnung von Arbeitsspeicher verwendet.

Um unter Windows-Versionen vor Windows 10 Version 2004 auszuführen, muss der Treiber POOL_ZERO_DOWN_LEVEL_SUPPORT definieren und ExInitializeDriverRuntime aufrufen, bevor diese Funktion aufgerufen wird.

Der einzige Unterschied zwischen dieser Funktion und ExAllocatePoolWithTag besteht darin, dass der Arbeitsspeicher null initialisiert ist. Wenn dies nicht gewünscht ist, verwenden Sie stattdessen ExAllocatePoolUninitialized , ein Wrapper für ExAllocatePoolWithTag.

Ein Treiber sollte nur auf den Arbeitsspeicher innerhalb des Bytebereichs zugreifen, den er ordnet. Der Zugriff auf Arbeitsspeicher außerhalb dieses Bereichs kann den Pool beschädigen und zum Absturz des Systems führen.

Weitere Anleitungen finden Sie im Abschnitt Hinweise von ExAllocatePoolWithTag .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Erfordert WDK für Windows 10 Version 2004. Zielt auf Windows 7 und höhere Versionen des Windows-Betriebssystems ab.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
IRQL IRQL <= DISPATCH_LEVEL (siehe Abschnitt Hinweise)
DDI-Complianceregeln CheckDeviceObjectFlags, HwStorPortProhibitedDDIs, IrqlExAllocatePool, IrqlExFree1, PowerDownAllocate, PowerUpFail, SpNoWait, StorPortStartIo

Weitere Informationen

ExAllocatePoolUninitialized