CmpRebuildKcbCache

INT64 __fastcall CmpRebuildKcbCache(_CM_KEY_CONTROL_BLOCK *KeyControlBlock){
  INT64 result; 
  _HHIVE *KeyHive; 
  __int64 KeyCell; 
  int v5; 
  int v6; 
  v6 = 0;
  result = *((unsigned int *)KeyControlBlock + 2);
  v5 = -1;
  if( (result & 0x10) != 0 || (*((_DWORD *)KeyControlBlock + 46) & 0x400000) != 0 )
    goto LABEL_7;
  KeyHive = KeyControlBlock->KeyHash.KeyHive;
  if( KeyHive )
  {
    KeyCell = KeyControlBlock->KeyHash.KeyCell;
    if( (_DWORD)KeyCell != -1 )
    {
      result = (INT64)KeyHive->GetCellRoutine(KeyHive, KeyCell, (_HV_GET_CELL_CONTEXT *)&v5);
      if( result )
      {
        ++KeyControlBlock->SequenceNumber;
        CmpRebuildKcbCacheFromNode(KeyControlBlock, (_CM_KEY_NODE *)result);
        result = ((__int64(__fastcall *)(_HHIVE *, int *))KeyControlBlock->KeyHash.KeyHive->ReleaseCellRoutine)(
                   KeyControlBlock->KeyHash.KeyHive,
                   &v5);
LABEL_7:
        LOBYTE(result) = 1;
        return result;
      }
    }
  }
  LOBYTE(result) = 0;
  return result;
}

Referenced by:

CmpCloneHwProfile
CmpCommitDiscardReplacePost
CmpRefreshHive
CmpSaveBootControlSet
CmpSyncKcbCacheForHive
CmpTransMgrFreeVolatileData