Share via


C30031

aviso C30031: chamando uma função de alocação de memória e passando um parâmetro que indica memória executável

A Análise de Código detectou o uso de POOL_NX_OPTIN e ExInitializeDriverRuntime(DrvRtPoolNxOptIn) foi chamado antes da função de entrada (por exemplo, DriverEntry() ou DllInitialize()). É possível que a função de entrada chame indiretamente ExInitializeDriverRuntime(DrvRtPoolNxOptIn), caso em que o erro pode ser suprimido (consulte Pragma Prefast to Suppress Warning Messages).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Exemplo

O código a seguir no arquivo de fontes gera este aviso:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

No arquivo de código

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

O código a seguir evita esse aviso:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}