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