Warnung C26835

RtlCompareMemory gibt die Anzahl der übereinstimmenden Bytes zurück. Erwägen Sie, diesen Anruf durch RtlEqualMemory

Hinweise

Wenn RtlCompareMemoryder Rückgabewert als boolescher Wert behandelt wird, wird er als "true" ausgewertet, wenn mindestens 1 gleich Byte vorhanden ist, bevor eine Differenz gefunden wird. Darüber hinaus wird der Vergleich des Ergebnisses von RtlCompareMemory 0 mit "false" ausgewertet, wenn mindestens 1 übereinstimmende Byte vorhanden sind. Dieses Verhalten kann unerwartet sein, da es sich von anderen Vergleichsfunktionen unterscheidet, wie z strcmp. B. den Code schwieriger zu verstehen. Um auf Gleichheit zu prüfen, sollten Sie stattdessen die Verwendung in Betracht ziehen RtlEqualMemory .

Diese Warnung ist in Visual Studio 2022, Version 17.7 und höher, verfügbar.

Beispiel

int foo(const void* ptr)
{
    if (RtlCompareMemory("test", ptr, 5) == 0) // C26835
    {
        // ... 
    }
}

Um das Problem zu beheben, überprüfen Sie, ob die ursprüngliche Absicht bestand, auf Gleichheit zu prüfen und den Funktionsaufruf durch RtlEqualMemory:

int foo(const void* ptr)
{
    if (RtlEqualMemory("test", ptr, 5)) // C26835
    {
        // ... 
    }
}

Siehe auch

RtlEqualMemory Makro (wdm.h)
RtlCompareMemory -Funktion (wdm.h)