C30031

Warnung C30031: Aufrufen einer Speicherzuweisungsfunktion und Übergeben eines Parameters, der ausführbaren Arbeitsspeicher angibt

Bei der Codeanalyse wurde die Verwendung von POOL_NX_OPTIN erkannt, und ExInitializeDriverRuntime(DrvRtPoolNxOptIn) wurde vor der Entry-Funktion aufgerufen (z. B. DriverEntry() oder DllInitialize()). Es ist möglich, dass die Entry-Funktion indirekt ExInitializeDriverRuntime(DrvRtPoolNxOptIn) aufruft, in diesem Fall kann der Fehler unterdrückt werden (siehe Pragma Prefast to Suppress Warning Messages).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Beispiel

Der folgende Code in der Quelldatei generiert diese Warnung:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

In der Codedatei

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    MakeSafeInitialization ();
…
}

Der folgende Code vermeidet diese Warnung:

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}