CmpDiscardKcb

INT64 __fastcall CmpDiscardKcb(UINT64 a1, INT64 a2){
  _QWORD *v2; 
  _CMHIVE *v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v9; 
  __int64 v10; 
  _CM_KEY_CONTROL_BLOCK *v11; 
  _QWORD *v12; 
  v2 = *(_QWORD **)(a1 + 192);
  if( v2 )
  {
    v9 = v2[3];
    if( v9 )
    {
      v10 = *v2;
      v11 = *(_CM_KEY_CONTROL_BLOCK **)(v9 + 16);
      if( *(_QWORD **)(*v2 + 8i64) != v2 || (v12 = (_QWORD *)v2[1], (_QWORD *)*v12 != v2) )
        __fastfail(3u);
      *v12 = v10;
      *(_QWORD *)(v10 + 8) = v12;
      *(_QWORD *)(*(_QWORD *)(a1 + 192) + 24i64) = 0i64;
      CmpDelayDerefKeyControlBlock(v11);
    }
  }
  v4 = *(_CMHIVE **)(a1 + 32);
  ++*(_QWORD *)(a1 + 304);
  *(_DWORD *)(a1 + 8) |= 0x20000u;
  *(_WORD *)(a1 + 66) = 0;
  CmpRemoveKeyHash(v4, (_CM_KEY_HASH *)(a1 + 16));
  CmpLockDeletedHashEntryExclusiveByKcb(a1);
  v5 = *(_QWORD *)(a1 + 32);
  v6 = *(_QWORD *)(v5 + 1656);
  v7 = 3
     * ((unsigned int)(*(_DWORD *)(v5 + 1664) - 1) & ((unsigned int)(101027
                                                                   * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) ^ ((unsigned __int64)(unsigned int)(101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) >> 9)));
  *(_QWORD *)(a1 + 24) = *(_QWORD *)(v6
                                   + 24
                                   * ((unsigned int)(*(_DWORD *)(v5 + 1664) - 1) & ((unsigned int)(101027
                                                                                                 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) ^ ((unsigned __int64)(unsigned int)(101027 * (*(_DWORD *)(a1 + 16) ^ (*(_DWORD *)(a1 + 16) >> 9))) >> 9)))
                                   + 16);
  *(_QWORD *)(v6 + 8 * v7 + 16) = a1 + 16;
  return CmpUnlockDeletedHashEntryByKcb(a1);
}

Referenced by:

CmDeleteLayeredKey
CmRenameKey
CmpCommitDeleteKeyUoW
CmpCommitDiscardReplacePost
CmpCommitRenameKeyUoW
CmpCompleteUnloadKey
CmpInvalidateAllHigherLayerKcbsPostCallback
CmpInvalidateSubtreeWorker
CmpLightWeightCommitDeleteKeyUoW
CmpLightWeightCommitRenameKeyUoW
CmpRefreshWorkerRoutine
CmpRemoveHiveFromNamespace
CmpTransMgrFreeVolatileData