C30031
предупреждение C30031: вызов функции выделения памяти и передача параметра, указывающего исполняемую память
Анализ кода обнаружил использование POOL_NX_OPTIN и метод ExInitializeDriverRuntime(DrvRtPoolNxOptIn) был вызван до вызова функции входа (например, DriverEntry() или DllInitialize()). Возможно, функция входа косвенно вызывает ExInitializeDriverRuntime(DrvRtPoolNxOptIn), в этом случае ошибку можно подавить (см. раздел Pragma Prefast to Suppress Warning Messages).
BANNED_MEM_ALLOCATION_MAYBE_SAFE
Примере
Следующий код в файле sources создает это предупреждение:
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);
…
}