Bagikan melalui


C30031

peringatan C30031: Memanggil fungsi alokasi memori dan meneruskan parameter yang menunjukkan memori yang dapat dieksekusi

Analisis Kode mendeteksi penggunaan POOL_NX_OPTIN dan ExInitializeDriverRuntime(DrvRtPoolNxOptIn) dipanggil sebelum fungsi entri (misalnya, DriverEntry() atau DllInitialize()). Ada kemungkinan bahwa fungsi entri secara tidak langsung memanggil ExInitializeDriverRuntime(DrvRtPoolNxOptIn), dalam hal ini kesalahan dapat ditekan (lihat Pragma Prefast untuk Menekan Pesan Peringatan).

BANNED_MEM_ALLOCATION_MAYBE_SAFE

Contoh

Kode berikut dalam file sumber menghasilkan peringatan ini:

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

Dalam file kode

void MakeSafeInitialization()
{
    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}

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

    MakeSafeInitialization ();
…
}

Kode berikut menghindari peringatan ini:

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

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}