Freigeben über


C30033

Warnung C30033: Die ausführbare Zuordnung wurde in einem Treiber erkannt, der mit POOL_NX_OPTINkompiliert wurde. Dieser Treiber wurde festgestellt, dass er zur Laufzeit von einem anderen Treiber geladen wird. Überprüfen Sie, ob der Ladetreiber ExInitializeDriverRuntime(DrvRtPoolNxOptIn) aufruft, in seinem DriverEntry.

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. Überprüfen Sie, ob 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 sicheren Beispiel unten)

In der Quelldatei

C_DEFINES=$(C_DEFINES)

In DriverEntry-, bevor eine Speicherzuweisung stattfindet:

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 Quelldatei

C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

In DriverEntry-, bevor eine Speicherzuweisung stattfindet:

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

    ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…

Beispiel Nr. 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');