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