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