CmpFindKcbInHashEntryByCompressedName

__int64 __fastcall CmpFindKcbInHashEntryByCompressedName(
        __int64 a1,
        unsigned int a2,
        __int64 a3,
        unsigned __int8 *a4,
        unsigned __int16 a5){
  __int64 v7; 
  __int64 i; 
  __int64 v10; 
  unsigned __int16 v11; 
  int v12; 
  UNICODE_STRING SearchName; 

  SearchName = 0i64;
  v7 = 0i64;
  for( i = *(_QWORD *)(*(_QWORD *)(a1 + 1640)
                      + 24
                      * ((unsigned int)(*(_DWORD *)(a1 + 1648) - 1) & ((101027 * (a2 ^ (a2 >> 9))) ^ ((unsigned __int64)(101027 * (a2 ^ (a2 >> 9))) >> 9)))
                      + 16); i; i = *(_QWORD *)(i + 8) )
  {
    if( *(_DWORD *)i == a2 && *(_QWORD *)(i + 56) == a3 )
    {
      v10 = *(_QWORD *)(i + 64);
      v11 = *(_WORD *)(v10 + 24);
      if( (*(_DWORD *)v10 & 1) != 0 )
      {
        v12 = CmpCompareTwoCompressedNames((_WCHAR *)a4, a5, (_WCHAR *)(v10 + 26), *(unsigned __int16 *)(v10 + 24));
      }
      else
      {
        SearchName.Buffer = (wchar_t *)(v10 + 26);
        SearchName.Length = v11;
        SearchName.MaximumLength = v11;
        v12 = CmpCompareCompressedName(&SearchName, (WCHAR *)a4, a5, 1ui64);
      }
      if( !v12 )
        return i - 16;
    }
  }
  return v7;
}

Referenced by:

CmpPartialPromoteSubkeys
CmpSubtreeEnumeratorAdvance