Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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');