C30031
警告 C30031:调用内存分配函数并传递指示可执行内存的参数
代码分析检测到在使用 POOL_NX_OPTIN 和 ExInitializeDriverRuntime (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);
…
}