Share via


Peligro C26835

RtlCompareMemory devuelve el número de bytes coincidentes. Considere la posibilidad de reemplazar esta llamada por RtlEqualMemory

Comentarios

Cuando RtlCompareMemoryel valor devuelto de se trata como un valor booleano, se evalúa como true cuando hay al menos 1 byte igual antes de encontrar una diferencia. Además, comparar el resultado de RtlCompareMemory a 0 se evalúa como false si hay al menos 1 byte coincidente. Este comportamiento puede ser inesperado porque es diferente de otras funciones de comparación, como strcmp, lo que dificulta la comprensión del código. Para comprobar si hay igualdad, considere la posibilidad de usar RtlEqualMemory en su lugar.

Esta advertencia está disponible en Visual Studio 2022, versión 17.7 y versiones posteriores.

Ejemplo

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

Para corregir el problema, compruebe si la intención original era comprobar la igualdad y reemplazar la llamada de función por RtlEqualMemory:

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

Consulte también

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