Condividi tramite


C30035

avviso C30035: è stata effettuata una chiamata a una funzione che deve essere effettuata dall'interno della funzione di inizializzazione,ad esempio DriverEntry() o DllInitialize()). PREfast non è riuscito a determinare se la chiamata è stata effettuata dalla funzione di inizializzazione.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

Il codice è stato compilato con la macro POOL_NX_OPTIN , ma l'inizializzazione non si è verificata all'interno di DriverEntry() o DllInitialize(). Per risolvere questo problema, spostare la chiamata all'interno della funzione di inizializzazione.

Esempio

Il codice seguente genera questo avviso.

Nel file di origini:

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

Il codice seguente evita questo avviso:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}