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