Sdílet prostřednictvím


C30035

upozornění C30035: Volání funkce, která musí být provedena z inicializační funkce (například DriverEntry() nebo DllInitialize()). PrEfast nemohl určit, zda bylo volání provedeno z inicializační funkce.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

Kód byl zkompilován pomocí makra POOL_NX_OPTIN, ale inicializace neproběhla uvnitř DriverEntry() nebo DllInitialize(). Tento problém vyřešíte přesunutím volání uvnitř inicializační funkce.

příklad

Následující kód vygeneruje toto upozornění.

V souboru zdrojů:

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);
}

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

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}