Dela via


C30033

varning C30033: Körbar allokering identifierades i en drivrutin som kompilerats med POOL_NX_OPTIN. Den här drivrutinen har fastställts vara inläst vid körning av en annan drivrutin. Kontrollera att inläsningsdrivrutinen anropar ExInitializeDriverRuntime(DrvRtPoolNxOptIn) i sin DriverEntry.

BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED

Det har fastställts att detta är en DLL som läses in av en annan drivrutin och därför inte har någon fullständig initieringsfunktion. Kontrollera att inläsningsdrivrutinen är:

  • Kompilerad med POOL_NX_OPTIN=1
  • Anropar ExInitializeDriverRuntime(DrvRtPoolNxOptIn) i initieringsfunktionen

Om inläsningsdrivrutinen anger dessa korrekt kan varningen ignoreras.

exempel

Följande kod i varje inläsare av DLL:en innebär att du bör göra ändringen (enligt det säkra exemplet nedan)

I källfilen

C_DEFINES=$(C_DEFINES)

I DriverEntry, innan någon minnesallokering sker:

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

Följande kod i varje inläsare av DLL:n innebär att du kan ignorera varningen.

Lägg till i källfilen

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

I DriverEntry, innan någon minnesallokering sker:

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

    ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…

Exempel 2

Ett annat sätt att åtgärda detta är att göra varje anrop uttryckligen referera till icke-körbart minne.

Följande kod genererar den här varningen.

ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');

Följande kod undviker den här varningen:

ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');