CmpFindKcbInHashEntryByName

_CM_KEY_CONTROL_BLOCK *__fastcall CmpFindKcbInHashEntryByName(
        _CMHIVE *Hive,
        _CM_PATH_HASH PathHash,
        _CM_KEY_CONTROL_BLOCK *Parent,
        const _UNICODE_STRING *ComponentName){
  _CM_KEY_CONTROL_BLOCK *v6; 
  _CM_KEY_HASH *i; 
  __int64 v9; 
  unsigned __int16 v10; 
  int v11; 
  UNICODE_STRING DestName; 

  DestName = 0i64;
  v6 = 0i64;
  for( i = Hive->KcbCacheTable[(Hive->KcbCacheTableSize - 1) & ((101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) ^ ((unsigned __int64)(101027 * (PathHash.Hash ^ (PathHash.Hash >> 9))) >> 9))].Entry;
        i;
        i = i->NextHash )
  {
    if( i->ConvKey.Hash == PathHash.Hash && *(_CM_KEY_CONTROL_BLOCK **)&i[1].KeyCell == Parent )
    {
      v9 = *(_QWORD *)&i[2].ConvKey.Hash;
      v10 = *(_WORD *)(v9 + 24);
      if( (*(_DWORD *)v9 & 1) != 0 )
      {
        v11 = CmpCompareCompressedName(
                (UNICODE_STRING *)ComponentName,
                (WCHAR *)(v9 + 26),
                *(unsigned __int16 *)(v9 + 24),
                2ui64);
      }
      else
      {
        DestName.Buffer = (wchar_t *)(v9 + 26);
        DestName.Length = v10;
        DestName.MaximumLength = v10;
        v11 = CmpCompareUnicodeString((_UNICODE_STRING *)ComponentName, &DestName, 2ui64);
      }
      if( !v11 )
        return(_CM_KEY_CONTROL_BLOCK *)&i[-1].KeyHive;
    }
  }
  return v6;
}

Referenced by:

CmRenameKey
CmpCreateKeyControlBlock
CmpPartialPromoteSubkeys
CmpSubtreeEnumeratorAdvance
CmpWalkOneLevel