Compartilhar via


C30035

Aviso C30035: uma chamada foi feita para uma função que deve ser feita de dentro da função de inicialização (por exemplo, DriverEntry() ou DllInitialize()). PREfast não pôde determinar se a chamada foi feita a partir da função de inicialização.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

O código foi compilado com a macro POOL_NX_OPTIN , mas a inicialização não ocorreu dentro de DriverEntry() ou DllInitialize(). Para corrigir isso, mova a chamada para dentro da função de inicialização.

Exemplo

O código a seguir gera esse aviso.

No arquivo de fontes:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    MakeSafeInitialization ();
…
}

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

O código a seguir evita esse aviso:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}