C30031
aviso C30031: chamando uma função de alocação de memória e passando um parâmetro que indica memória executável
A Análise de Código detectou o uso de POOL_NX_OPTIN e ExInitializeDriverRuntime(DrvRtPoolNxOptIn) foi chamado antes da função de entrada (por exemplo, DriverEntry() ou DllInitialize()). É possível que a função de entrada chame indiretamente ExInitializeDriverRuntime(DrvRtPoolNxOptIn), caso em que o erro pode ser suprimido (consulte Pragma Prefast to Suppress Warning Messages).
BANNED_MEM_ALLOCATION_MAYBE_SAFE
Exemplo
O código a seguir no arquivo de fontes gera este aviso:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
No arquivo de código
void MakeSafeInitialization()
{
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
MakeSafeInitialization ();
…
}
O código a seguir evita esse aviso:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}