Udostępnij przez


Ostrzeżenie C26835

RtlCompareMemory Zwraca liczbę pasujących bajtów. Rozważ zastąpienie tego wywołania elementem RtlEqualMemory

Uwagi

Gdy RtlCompareMemorywartość zwracana jest traktowana jako wartość logiczna, daje wartość true, gdy przed znalezieniem różnicy występuje co najmniej 1 równe bajty. Ponadto porównanie wyniku z RtlCompareMemory wartością 0 daje wartość false, jeśli istnieje co najmniej 1 pasujący bajt. To zachowanie może być nieoczekiwane, ponieważ różni się od innych funkcji porównania, takich jak strcmp, co utrudnia zrozumienie kodu. Aby sprawdzić równość, rozważ użycie RtlEqualMemory zamiast tego.

To ostrzeżenie jest dostępne w programie Visual Studio 2022 w wersji 17.7 lub nowszej.

Przykład

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

Aby rozwiązać ten problem, sprawdź, czy pierwotnym zamiarem było sprawdzenie równości i zastąpienie wywołania funkcji ciągiem RtlEqualMemory:

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

Zobacz też

RtlEqualMemory makro (wdm.h)
RtlCompareMemory function (wdm.h)