C30031

警告 C30031:调用内存分配函数并传递指示可执行内存的参数

在输入函数(例如,DriverEntry()DllInitialize()之前调用了使用 POOL_NX_OPTINExInitializeDriverRuntime(DrvRtPoolNxOptIn) 的代码分析。 入口函数可能间接调用 ExInitializeDriverRuntime(DrvRtPoolNxOptIn,在这种情况下,可以抑制错误(请参阅 Pragma Prefast 以禁止显示警告消息)。

BANNED_MEM_ALLOCATION_MAYBE_SAFE

示例

源文件中的以下代码生成以下警告:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

在代码文件中

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

以下代码避免出现以下警告:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}