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