EmpEvaluateTargetRule
__int64 __fastcall EmpEvaluateTargetRule(__int64 a1, __int64 a2, int a3){
_QWORD *v4;
VOID *v5;
unsigned int v6;
int v7;
unsigned int v8;
unsigned int v9;
VOID **v10;
_QWORD *v11;
VOID *v12;
unsigned int v13;
unsigned int v14;
unsigned int v15;
_QWORD *v16;
__int64 v17;
unsigned int i;
int v19;
__int64 v20;
UINT64 v22;
unsigned int v23;
__int64 v24;
__int64 v25;
VOID **PoolWithTag;
unsigned int v27;
unsigned int v30;
v4 = 0i64;
v25 = *(_QWORD *)(a1 + 8);
v5 = 0i64;
v6 = *(_DWORD *)(v25 + 40);
v7 = *(_DWORD *)(v25 + 44);
v8 = 1;
v24 = *(_QWORD *)(a1 + 16);
v9 = 0;
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x1000ui64, 1986350405i64);
v10 = PoolWithTag;
if( PoolWithTag )
v9 = 4096;
v23 = v9;
v27 = v9;
if( !v6 && !v7 )
{
v30 = 1;
goto LABEL_9;
}
v30 = *(_DWORD *)(a1 + 24) / (v7 + v6);
if( v6 )
{
LODWORD(v11) = EmpAllocatePool(8 * v6);
v4 = v11;
if( !v11 )
goto LABEL_22;
}
if( !v7 || (LODWORD(v12) = EmpAllocatePool(4 * v7), (v5 = v12) != 0i64) )
{
if( !v30 )
{
LABEL_18:
if( v5 )
EmpFreePool(v5, (UINT64)v10, v9);
goto LABEL_20;
}
LABEL_9:
v13 = v7 + v6;
v14 = 0;
do
{
v15 = 0;
if( v6 )
{
v16 = v4;
do
{
v17 = v14 * v13 + v15++;
*v16++ = *((_QWORD *)qword_140C50898 + *(unsigned int *)(v24 + 4 * v17));
}
while( v15 < v6 );
}
for( i = v6; i < v13; *((_DWORD *)v5 + v20) = v19 )
{
v19 = *(_DWORD *)(v24 + 4i64 * (v14 * v13 + i));
v20 = i - v6;
++i;
}
LODWORD(v22) = v27;
v8 = EmpEvaluateNodeLink(
*(int **)(v25 + 96),
(__int64)v4,
v6,
(__int64)v5,
v7,
a2,
a3,
0i64,
0,
(UINT64)PoolWithTag,
v22);
if( v8 - 1 <= 1 )
break;
++v14;
}
while( v14 < v30 );
v10 = PoolWithTag;
v9 = v23;
goto LABEL_18;
}
LABEL_20:
if( v4 )
EmpFreePool(v4, (UINT64)v10, v9);
LABEL_22:
if( v10 )
ExFreePoolWithTag(v10, 0x76654D45u);
return v8;
}Referenced by:
EmClientRuleEvaluate
EmpEvaluateUpdateRuleEvalState