C30031

uyarı C30031: Bellek ayırma işlevini çağırma ve yürütülebilir belleği gösteren bir parametre geçirme

Kod Analizi, giriş işlevinden önce POOL_NX_OPTIN ve ExInitializeDriverRuntime(DrvRtPoolNxOptIn) çağrıldığını algıladı (örneğin, DriverEntry() veya DllInitialize()). Giriş işlevi dolaylı olarak ExInitializeDriverRuntime(DrvRtPoolNxOptIn)çağırabilir ve bu durumda hata gizlenebilir (bkz. Uyarı İletilerini Bastırmak için Pragma Prefast).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Örneği

Kaynak dosyasındaki aşağıdaki kod bu uyarıyı oluşturur:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

Kod dosyasında

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

Aşağıdaki kod bu uyarıyı önler:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}