CmpCompareKeysByName
INT64 __fastcall CmpCompareKeysByName(_CM_KEY_NODE *Key1, _CM_KEY_NODE *Key2){
_WCHAR *Name;
__int16 v3;
bool v4;
unsigned int v5;
UINT64 v6;
INT64 result;
UINT64 NameLength;
UNICODE_STRING SearchName;
UNICODE_STRING SourceName;
Name = Key2->Name;
v3 = Key2->Flags & 0x20;
v4 = (Key1->Flags & 0x20) == 0;
SourceName = 0i64;
SearchName = 0i64;
if( v4 )
{
SourceName.Buffer = Key1->Name;
if( v3 )
{
NameLength = Key2->NameLength;
SourceName.Length = Key1->NameLength;
SourceName.MaximumLength = SourceName.Length;
return CmpCompareCompressedName(&SourceName, Key2->Name, NameLength, 0i64);
}
else
{
SearchName.Length = Key2->NameLength;
SearchName.MaximumLength = SearchName.Length;
SourceName.Length = Key1->NameLength;
SourceName.MaximumLength = SourceName.Length;
SearchName.Buffer = Key2->Name;
LODWORD(result) = CmpCompareUnicodeString(&SourceName, &SearchName, 0i64);
}
}
else
{
v5 = Key2->NameLength;
v6 = Key1->NameLength;
if( v3 )
{
return CmpCompareTwoCompressedNames(Key1->Name, v6, Name, v5);
}
else
{
SearchName.Buffer = Name;
SearchName.Length = v5;
SearchName.MaximumLength = v5;
return(unsigned int)-CmpCompareCompressedName(&SearchName, Key1->Name, (unsigned int)v6, 0i64);
}
}
return result;
}Referenced by:
CmpFindSubKeyByNumberFromMergedView
CmpKeyEnumStackAdvanceInternal
CmpKeyEnumStackEntryAdvance
CmpKeyEnumStackEntryBegin