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');