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