CmpValueEnumStackStartFromKeyNodeStack

INT64 __fastcall CmpValueEnumStackStartFromKeyNodeStack(INT64 a1, INT16 *a2){
  unsigned int v2; 
  __int16 v5; 
  INT64 EntryAtLayerHeight; 
  INT16 v7; 
  __int64 *v8; 
  __int64 *v9; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v14; 
  VOID **PoolWithTag; 
  __int64 v16; 

  v2 = 0;
  if( *a2 >= 2 )
  {
    LOWORD(v14) = *a2 - 1;
    PoolWithTag = ExAllocatePoolWithTag(1ui64, 32i64 * (__int16)v14, 808930627i64);
    *(_QWORD *)(a1 + 80) = PoolWithTag;
    if( !PoolWithTag )
      return(unsigned int)-1073741670;
    if( (__int16)v14 > 0 )
    {
      v16 = 0i64;
      v14 = (unsigned __int16)v14;
      do
      {
        CmpValueEnumStackEntryInitialize(v16 + *(_QWORD *)(a1 + 80));
        v16 += 32i64;
        --v14;
      }
      while( v14 );
    }
  }
  v5 = *a2;
  for( *(_WORD *)(a1 + 12) = *a2; v5 >= 0; --v5 )
  {
    EntryAtLayerHeight = CmpValueEnumStackGetEntryAtLayerHeight(a1, v5);
    v8 = (__int64 *)CmpKeyNodeStackGetEntryAtLayerHeight((INT64)a2, v7);
    v9 = v8;
    v10 = v8[2];
    if( v10 )
    {
      if( (unsigned int)CmpGetEffectiveKeyNodeSemantics(*v8, v10) == 1 )
        break;
      if( *(_DWORD *)(v11 + 36) )
      {
        *(_QWORD *)EntryAtLayerHeight = v12;
        *(_DWORD *)(EntryAtLayerHeight + 24) = *(_DWORD *)(v11 + 36);
        *(_QWORD *)(EntryAtLayerHeight + 8) = (*(__int64(__fastcall **)(__int64, _QWORD, INT64))(v12 + 8))(
                                                v12,
                                                *(unsigned int *)(v11 + 40),
                                                EntryAtLayerHeight + 16);
        v11 = v9[2];
        v12 = *v9;
      }
      if( (unsigned int)CmpGetEffectiveKeyNodeSemantics(v12, v11) )
        break;
    }
  }
  return v2;
}

Referenced by:

CmpFullPromoteSingleKeyFromKeyNodeStacks
CmpGetValueCountForKeyNodeStack
CmpValueEnumStackStartFromKcbStack