Condividi tramite


C30033

avviso C30033: L'allocazione eseguibile è stata rilevata in un driver compilato con POOL_NX_OPTIN. Questo driver è stato determinato a essere caricato in fase di esecuzione da un altro driver. Verificare che il driver di caricamento chiami ExInitializeDriverRuntime(DrvRtPoolNxOptIn) nel relativo driverEntry.

BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED

È stato determinato che si tratta di una DLL caricata da un altro driver e, di conseguenza, non dispone di una funzione di inizializzazione completa. Verificare che il driver di caricamento sia:

  • Compilato con POOL_NX_OPTIN=1
  • Chiama ExInitializeDriverRuntime(DrvRtPoolNxOptIn) nella relativa funzione di inizializzazione

Se il driver di caricamento specifica correttamente questi valori, l'avviso può essere ignorato.

Esempio di

Il codice seguente in ogni caricatore della DLL significa che è necessario apportare la modifica (in base all'esempio sicuro riportato di seguito)

Nel file sources

C_DEFINES=$(C_DEFINES)

In DriverEntryprima che si verifichi un'allocazione di memoria:

NTSTATUS
DriverEntry (
    _In_ PDRIVER_OBJECT DriverObject,
    _In_ PUNICODE_STRING RegistryPath
    )
{
    NTSTATUS status;
…
    // No call to ExInitializeDriverRuntime
    return(status)
}

Il codice seguente in ogni caricatore della DLL significa che è possibile ignorare l'avviso.

Nel file sources aggiungere

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

In DriverEntryprima che si verifichi un'allocazione di memoria:

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

    ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…

esempio n. 2

Un secondo modo per risolvere questo problema consiste nell'eseguire ogni chiamata che fa riferimento in modo esplicito alla memoria non eseguibile.

Il codice seguente genera questo avviso.

ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');

Il codice seguente evita questo avviso:

ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');