C30033
Warnung C30033: Die Zuordnung ausführbarer Dateien wurde in einem Treiber erkannt, der mit POOL_NX_OPTIN kompiliert wurde. Dieser Treiber wurde zur Laufzeit von einem anderen Treiber geladen. Überprüfen Sie, ob der Ladetreiber ExInitializeDriverRuntime(DrvRtPoolNxOptIn) in driverEntry aufruft.
BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED
Es wurde festgestellt, dass es sich um eine DLL handelt, die von einem anderen Treiber geladen wird und daher keine vollständige Initialisierungsfunktion aufweist. Vergewissern Sie sich, dass der Ladetreiber folgendes ist:
- Kompiliert mit POOL_NX_OPTIN=1
- Ruft ExInitializeDriverRuntime(DrvRtPoolNxOptIn) in seiner Initialisierungsfunktion auf.
Wenn der Ladetreiber diese korrekt angibt, kann die Warnung ignoriert werden.
Beispiel
Der folgende Code in jedem Ladeprogramm der DLL bedeutet, dass Sie die Änderung vornehmen sollten (gemäß dem folgenden sicheren Beispiel).
In der Quelldatei
C_DEFINES=$(C_DEFINES)
In DriverEntry, bevor die Speicherzuordnung erfolgt:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
…
// No call to ExInitializeDriverRuntime
return(status)
}
Der folgende Code in jedem Ladeprogramm der DLL bedeutet, dass Sie die Warnung ignorieren können.
Fügen Sie in der Quellendatei
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
In DriverEntry, bevor die Speicherzuordnung erfolgt:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…
Beispiel #2
Eine zweite Möglichkeit, dies zu beheben, besteht darin, dass jeder Aufruf explizit auf nicht ausführbaren Speicher verweist.
Der folgende Code generiert diese Warnung.
ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');
Der folgende Code vermeidet diese Warnung:
ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');