Freigeben über


C30029

Warnung: Aufruf einer Speicherzuweisungsfunktion, die ausführbaren Speicher anfordert

Diese Warnung zeigt an, dass eine Funktion verwendet wird, die verboten wurde und für die es einen robusteren oder sichereren Ersatz gibt. Dieser spezifische Fehler deutet auf die Verwendung einer API hin, die nur ausführbare nicht ausgelagerte Pools zuweist.

Hinweise

Dies sollte nur verwendet werden, wenn ausführbarer Speicher benötigt wird. Weitere Informationen hierzu finden Sie unter No-Execute (NX) Nonpaged Pool . Sie können keine Parameter angeben, die dieses Verhalten ändern würden. Die einzige Möglichkeit, dieses Problem zu beheben, ist die Verwendung einer alternativen Funktion, die die Zuweisung von nicht ausführbarem, nicht ausgelagertem Pool-Speicher ermöglicht. Eine Liste aller verbotenen Funktionen, die von diesem Fehler betroffen sind, und die empfohlenen Ersetzungen finden Sie nach dem folgenden Beispiel.

Name der Codeanalyse: BANNED_MEM_ALLOCATION_NOTYPE

Beispiel

Der folgende Code erzeugt diese Warnung. Dieses Problem ist auf die Verwendung von MmMapIoSpace zurückzuführen:

MmMapIoSpace(PhysicalAddress, numberOfBytes, MmNonCached);

Der folgende Code vermeidet diese Warnung, indem er MmMapIoSpace durch MmMapIoSpace ersetzt:

MmMapIoSpaceEx(PhysicalAddress, numberOfBytes, PAGE_NOCACHE | PAGE_READWRITE);

Verbotene Funktionen

Verbotene API Ersetzung(en) Begründung / Anmerkungen
MmMapIoSpace() MmMapIoSpaceEx()
MmAllocateContiguousMemorySpecifyCache() MmAllocateContiguousNodeMemory() Je nach Cache-Typ kann SpecifyCache so verwendet werden, dass es sich auf nicht ausführbaren Speicher beschränkt. Dies wird jedoch durch die Verwendung von NodeMemory sichergestellt. Weitere Informationen hierzu finden Sie unter C30030, Unterabschnitt 'For defects involving cache types'.