Compartir a través de


C30031

advertencia C30031: llamar a una función de asignación de memoria y pasar un parámetro que indica la memoria ejecutable

El análisis de código detectó el uso de POOL_NX_OPTIN y ExInitializeDriverRuntime(DrvRtPoolNxOptIn) antes de llamar a la función de entrada (por ejemplo, DriverEntry() o DllInitialize()). Es posible que la función de entrada llame indirectamente a ExInitializeDriverRuntime(DrvRtPoolNxOptIn), en cuyo caso se puede suprimir el error (vea Pragma Prefast to Suppress Warning Messages).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Ejemplo

El código siguiente en el archivo de orígenes genera esta advertencia:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

En el archivo de código

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

El código siguiente evita esta advertencia:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}