Sdílet prostřednictvím


C30031

upozornění C30031: Volání funkce přidělování paměti a předání parametru, který označuje spustitelný paměť

Analýza kódu zjistila použití POOL_NX_OPTIN a ExInitializeDriverRuntime(DrvRtPoolNxOptIn) byla volána před vstupní funkcí (například DriverEntry() nebo DllInitialize()). Je možné, že vstupní funkce nepřímo volá ExInitializeDriverRuntime(DrvRtPoolNxOptIn), v takovém případě může být chyba potlačena (viz Pragma Prefast potlačovat zprávy upozornění).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

příklad

Následující kód v souboru zdrojů vygeneruje toto upozornění:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

V souboru kódu

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

Následující kód se vyhne tomuto upozornění:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}