Compartir a través de


C30035

advertencia C30035: se realizó una llamada a una función que se debe realizar desde dentro de la función de inicialización (por ejemplo, DriverEntry() o DllInitialize()). PREfast no pudo determinar si la llamada se realizó desde la función de inicialización.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

El código se compiló con la macro POOL_NX_OPTIN, pero la inicialización no se produjo dentro de DriverEntry() o DllInitialize(). Para corregirlo, mueva la llamada dentro de la función de inicialización.

Ejemplo

El código siguiente genera esta advertencia.

En el archivo de orígenes:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    MakeSafeInitialization ();
…
}

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

El código siguiente evita esta advertencia:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}