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ée 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 de

Le code suivant dans le fichier sources 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);
…
}