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