警告 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);
…
}