Exemplo n.º 1
0
//--------------------------------------------------------------------------------------
BOOLEAN IsKnownDriver(PUNICODE_STRING usName)
{
    // enumerate known modules
    for (size_t i = 0; i < sizeof(m_wcKnownDrivers) / sizeof(PWSTR); i++)
    {
        PWSTR wcName_1 = m_wcKnownDrivers[i], wcName_2 = usName->Buffer;
        size_t Len_1 = wcslen(wcName_1);
        size_t Len_2 = usName->Length / sizeof(wchar_t);

        if (Len_1 > Len_2)
        {
            goto next;
        }

        // match image path from the end
        for (size_t n = 1; n < Len_1; n++)
        {
            if (wcName_1[Len_1 - n] != chrlwr_w(wcName_2[Len_2 - n]))
            {
                goto next;
            }
        }

        return TRUE;

next:
        continue;
    }

    return FALSE;
}
Exemplo n.º 2
0
BOOLEAN EqualUnicodeString_r(PUNICODE_STRING Str1, PUNICODE_STRING Str2, BOOLEAN CaseInSensitive)
{
    USHORT CmpLen = min(Str1->Length, Str2->Length) / sizeof(WCHAR);

    // compare unicode strings from the end of the buffers
    for (USHORT i = 1; i < CmpLen; i++)
    {
        WCHAR Chr1 = Str1->Buffer[Str1->Length / sizeof(WCHAR) - i], 
              Chr2 = Str2->Buffer[Str2->Length / sizeof(WCHAR) - i];

        if (CaseInSensitive)
        {
            Chr1 = chrlwr_w(Chr1);
            Chr2 = chrlwr_w(Chr2);
        }

        if (Chr1 != Chr2)
        {
            return FALSE;
        }
    }

    return TRUE;
}