C30031
advertencia C30031: llamar a una función de asignación de memoria y pasar un parámetro que indica la memoria ejecutable
El análisis de código detectó el uso de POOL_NX_OPTIN y ExInitializeDriverRuntime(DrvRtPoolNxOptIn) antes de llamar a la función de entrada (por ejemplo, DriverEntry() o DllInitialize()). Es posible que la función de entrada llame indirectamente a ExInitializeDriverRuntime(DrvRtPoolNxOptIn), en cuyo caso se puede suprimir el error (vea Pragma Prefast to Suppress Warning Messages).
BANNED_MEM_ALLOCATION_MAYBE_SAFE
Ejemplo
El código siguiente en el archivo de orígenes genera esta advertencia:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
En el archivo de código
void MakeSafeInitialization()
{
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
MakeSafeInitialization ();
…
}
El código siguiente evita esta advertencia:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}