Delen via


C30033

waarschuwing C30033: Uitvoerbare toewijzing is gedetecteerd in een stuurprogramma dat is gecompileerd met POOL_NX_OPTIN. Dit stuurprogramma is tijdens runtime door een ander stuurprogramma geladen. Controleer of het laadstuurprogramma ExInitializeDriverRuntime(DrvRtPoolNxOptIn) in de DriverEntry.

BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED

Er is vastgesteld dat dit een DLL is die door een ander stuurprogramma wordt geladen en daarom geen volledige initialisatiefunctie heeft. Controleer of het laadstuurprogramma het volgende is:

  • Gecompileerd met POOL_NX_OPTIN=1
  • Roept ExInitializeDriverRuntime(DrvRtPoolNxOptIn) aan in de initialisatiefunctie

Als het laadstuurprogramma deze correct opgeeft, kan de waarschuwing worden genegeerd.

voorbeeld

De volgende code in elk laadprogramma van de DLL betekent dat u de wijziging moet aanbrengen (volgens het onderstaande veilige voorbeeld)

In het bronbestand

C_DEFINES=$(C_DEFINES)

In DriverEntry, voordat er geheugentoewijzing plaatsvindt:

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

De volgende code in elk laadprogramma van de DLL betekent dat u de waarschuwing kunt negeren.

Voeg het bronbestand toe

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

In DriverEntry, voordat er geheugentoewijzing plaatsvindt:

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

    ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…

voorbeeld 2

Een tweede manier om dit op te lossen, is door elke aanroep expliciet te verwijzen naar niet-uitvoerbaar geheugen.

Met de volgende code wordt deze waarschuwing gegenereerd.

ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');

De volgende code voorkomt deze waarschuwing:

ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');