C30031

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

代码分析检测到在使用 POOL_NX_OPTINExInitializeDriverRuntime (DrvRtPoolNxOptIn) 之前调用了输入函数 (,例如 DriverEntry () DllInitialize () ) 。 入口函数可能会间接调用 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);
…
}