次の方法で共有


C30031

警告 C30031: メモリ割り当て関数を呼び出し、実行可能メモリを示すパラメーターを渡す

コード分析では、エントリ関数 (たとえば、DriverEntry() または DllInitialize()) の前に、POOL_NX_OPTIN および ExInitializeDriverRuntime(DrvRtPoolNxOptIn) が呼び出されたことが検出されました。 エントリ関数は ExInitializeDriverRuntime(DrvRtPoolNxOptIn) 間接的に呼び出すことができます。この場合、エラーを抑制できます (警告メッセージを抑制するには、「pragma Prefast to Suppress Warning Messages を参照してください)。

BANNED_MEM_ALLOCATION_MAYBE_SAFE

の例

ソース ファイル内の次のコードでは、この警告が生成されます。

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

コード ファイル内

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    MakeSafeInitialization ();
…
}

次のコードは、この警告を回避します。

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}