//-------------------------------------------------------------------------------------- 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; }
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; }