警告 C26835

RtlCompareMemory 将返回匹配的字节数。 请考虑将此调用替换为 RtlEqualMemory

备注

RtlCompareMemory 的返回值被视为布尔值时,如果在找到差异之前至少有 1 个相等的字节,则其计算结果为 true。 此外,如果至少有 1 个匹配字节,则将 RtlCompareMemory 的结果与 0 进行比较将得出 false。 此行为可能会出乎意料,因为它与其他比较函数(例如 strcmp)不同,使得代码更难理解。 若要检查是否相等,请考虑改用 RtlEqualMemory

此警告在 Visual Studio 2022 版本 17.7 及更高版本中可用。

示例

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

若要解决此问题,请验证原始意图是否要检查是否相等,并将函数调用替换为 RtlEqualMemory

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

另请参阅

RtlEqualMemory 宏 (wdm.h)
RtlCompareMemory 函数 (wdm.h)