Condividi tramite


C30031

avviso C30031: Chiamata di una funzione di allocazione della memoria e passaggio di un parametro che indica la memoria eseguibile

L'analisi del codice ha rilevato l'uso di POOL_NX_OPTIN e ExInitializeDriverRuntime(DrvRtPoolNxOptIn) è stato chiamato prima della funzione di immissione (ad esempio , DriverEntry() o DllInitialize()). È possibile che la funzione di voce chiami indirettamente ExInitializeDriverRuntime(DrvRtPoolNxOptIn), nel qual caso l'errore può essere eliminato (vedere Pragma Prefast to Suppress Warning Messages).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Esempio

Il codice seguente nel file di origini genera questo avviso:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

Nel file di codice

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

Il codice seguente evita questo avviso:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}