Partager via


C30031

avertissement C30031 : Appel d’une fonction d’allocation de mémoire et passage d’un paramètre qui indique la mémoire exécutable

L’analyse du code a détecté l’utilisation de POOL_NX_OPTIN et ExInitializeDriverRuntime(DrvRtPoolNxOptIn) a été appelé avant la fonction d’entrée (par exemple, DriverEntry() ou DllInitialize()). Il est possible que la fonction d’entrée appelle indirectement ExInitializeDriverRuntime(DrvRtPoolNxOptIn), auquel cas l’erreur peut être supprimée (voir Pragma Prefast to Suppress Warning Messages).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Exemple

Le code suivant dans le fichier source génère cet avertissement :

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

Dans le fichier de code

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

Le code suivant évite cet avertissement :

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}