C30035
avviso C30035: è stata effettuata una chiamata a una funzione che deve essere effettuata dall'interno della funzione di inizializzazione,ad esempio DriverEntry() o DllInitialize()). PREfast non è riuscito a determinare se la chiamata è stata effettuata dalla funzione di inizializzazione.
BANNED_MEM_ALLOCATION_MAYBE_BAD_CALL_SITE
Il codice è stato compilato con la macro POOL_NX_OPTIN , ma l'inizializzazione non si è verificata all'interno di DriverEntry() o DllInitialize(). Per risolvere questo problema, spostare la chiamata all'interno della funzione di inizializzazione.
Esempio
Il codice seguente genera questo avviso.
Nel file di origini:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
MakeSafeInitialization ();
…
}
void MakeSafeInitialization()
{
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
}
Il codice seguente evita questo avviso:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
…
}