Partager via


C30035

avertissement C30035 : Un appel a été effectué à une fonction qui doit être effectuée à partir de la fonction d’initialisation (par exemple, DriverEntry() ou DllInitialize()). PREfast n’a pas pu déterminer si l’appel a été effectué à partir de la fonction d’initialisation.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

Le code a été compilé avec la macro POOL_NX_OPTIN , mais l’initialisation n’a pas eu lieu à l’intérieur de DriverEntry() ou DllInitialize(). Pour résoudre ce problème, déplacez l’appel à l’intérieur de la fonction d’initialisation.

Exemple

Le code suivant génère cet avertissement.

Dans le fichier source :

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

Le code suivant évite cet avertissement :

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}