CmpPromoteSingleKeyFromParentKcbAndChildKeyNode

INT64 __fastcall CmpPromoteSingleKeyFromParentKcbAndChildKeyNode(INT64 a1, INT16 *a2, CHAR a3){
  char v6; 
  INT16 v7; 
  _CM_KEY_CONTROL_BLOCK *KcbAtLayerHeight; 
  int started; 
  INT64 EntryAtLayerHeight; 
  INT16 v11; 
  INT64 result[10]; 
  memset((INT64)result, 0i64);
  v6 = 0;
  CmpInitializeKeyNodeStack((INT64)result);
  v7 = *(_WORD *)(a1 + 2);
  KcbAtLayerHeight = (_CM_KEY_CONTROL_BLOCK *)CmpGetKcbAtLayerHeight(a1, v7);
  started = CmpStartKeyNodeStackFromKcbStack((INT64)result, a1);
  if( started < 0 )
    goto LABEL_11;
  EntryAtLayerHeight = CmpKeyNodeStackGetEntryAtLayerHeight((INT64)result, v7);
  if( *(_DWORD *)(CmpKeyNodeStackGetEntryAtLayerHeight((INT64)a2, v11) + 8) == -1 )
  {
    started = CmpPartialPromoteSingleKeyFromKeyNodeStacks((INT16 *)result, (INT64)a2);
    if( started < 0 )
      goto LABEL_11;
    v6 = 1;
  }
  if( a3 )
  {
    started = CmpFullPromoteSingleKeyFromKeyNodeStacks((INT64)result, a2);
    if( started < 0 )
      goto LABEL_9;
    v6 = 1;
  }
  started = 0;
LABEL_9:
  if( v6 )
  {
    ++KcbAtLayerHeight->SequenceNumber;
    CmpRebuildKcbCacheFromNode(KcbAtLayerHeight, *(_CM_KEY_NODE **)(EntryAtLayerHeight + 16));
  }
LABEL_11:
  CmpCleanupKeyNodeStack((INT64)result);
  return(unsigned int)started;
}

Referenced by:

CmpPartialPromoteSubkeys
CmpPromoteSubtree