共用方式為


C30035

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