CmpFindKcbInHashEntryByCompressedName

VOID __stdcall CmpFindKcbInHashEntryByCompressedName(
        _CMHIVE *Hive,
        _CM_PATH_HASH PathHash,
        _CM_KEY_CONTROL_BLOCK *Parent,
        PWCHAR ComponentName,
        UINT16 ComponentNameLength){
  __int64 i; 
  __int64 v9; 
  unsigned __int16 v10; 
  int v11; 
  UNICODE_STRING SearchName; 
  SearchName = 0i64;
  for( i = *(_QWORD *)(*((_QWORD *)Hive + 205)
                      + 24
                      * ((unsigned int)(*((_DWORD *)Hive + 412) - 1) & ((101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) ^ ((unsigned __int64)(101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) >> 9)))
                      + 16); i; i = *(_QWORD *)(i + 8) )
  {
    if( *(_DWORD *)i == PathHash.Hash && *(_CM_KEY_CONTROL_BLOCK **)(i + 56) == Parent )
    {
      v9 = *(_QWORD *)(i + 64);
      v10 = *(_WORD *)(v9 + 24);
      if( (*(_DWORD *)v9 & 1) != 0 )
      {
        v11 = CmpCompareTwoCompressedNames(
                ComponentName,
                ComponentNameLength,
                (WCHAR *)(v9 + 26),
                *(unsigned __int16 *)(v9 + 24));
      }
      else
      {
        SearchName.Buffer = (wchar_t *)(v9 + 26);
        SearchName.Length = v10;
        SearchName.MaximumLength = v10;
        v11 = CmpCompareCompressedName(&SearchName, ComponentName, ComponentNameLength, 1ui64);
      }
      if( !v11 )
        break;
    }
  }
}

Referenced by:

CmpPartialPromoteSubkeys
CmpSubtreeEnumeratorAdvance