Поделиться через


C30035

предупреждение C30035: вызов был выполнен в функцию, которая должна выполняться внутри функции инициализации (например, DriverEntry() или DllInitialize()). PREfast не удалось определить, был ли вызов выполнен из функции инициализации.

BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE

Код был скомпилирован с помощью макроса POOL_NX_OPTIN, но инициализация не произошла внутри DriverEntry() или DllInitialize(). Чтобы устранить эту проблему, переместите вызов внутри функции инициализации.

Пример

Следующий код создает это предупреждение.

В файле источников:

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

Следующий код избегает этого предупреждения:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}