PpmPerfApplyDomainState
__int64 __fastcall PpmPerfApplyDomainState(__int64 a1){
__int64 v1;
unsigned __int8 v3;
BYTE *v4;
CHAR PerfPolicyClass;
__int64 v6;
unsigned int v7;
char v8;
unsigned int v9;
unsigned int v10;
unsigned int v11;
INT64 *v12;
INT64 v13;
unsigned int v14;
unsigned __int64 v15;
unsigned int v16;
unsigned int v17;
__int64 v18;
__int128 *v19;
char v20;
__int64 v22;
int v23;
unsigned int v24;
char v25;
unsigned int v26;
unsigned int v27;
unsigned int v28;
unsigned int v29;
unsigned int v30;
unsigned int v31;
unsigned int v32;
unsigned int v33;
unsigned int v34;
__int64 v35;
unsigned int v36;
unsigned int v37;
unsigned int v38;
bool v39;
unsigned int v40;
unsigned int v41;
char v42;
unsigned int v43;
unsigned int v44;
int v45;
__int64 v46;
EVENT_DESCRIPTOR *v47;
int IsSubsetAffinity;
char v49;
char v50;
int v51;
char v52;
char v53;
unsigned __int8 v54;
char v55;
unsigned int v56;
unsigned int v57;
int v58;
unsigned int v59;
unsigned int v60;
unsigned int v61;
unsigned int v62;
unsigned int v63;
unsigned int v64;
unsigned int v65;
unsigned int v66;
__int64 v67;
__int64 v68;
__int64 v69;
__int128 v70;
__int128 v71;
__int64 v72;
v72 = 0i64;
v1 = *(_QWORD *)(a1 + 216);
v66 = 0;
v68 = 0i64;
v3 = 0;
v70 = 0i64;
v69 = *(_QWORD *)(v1 + 8);
v71 = 0i64;
v53 = 0;
v55 = 0;
v4 = *(BYTE **)(a1 + 16);
v67 = (__int64)PpmCurrentProfile + 2736 * dword_140C23D0C + 40;
PerfPolicyClass = PpmGetPerfPolicyClass(v4);
v7 = *(_DWORD *)(a1 + 328);
v8 = 0;
v54 = PerfPolicyClass;
v9 = 100;
v10 = *(_DWORD *)(a1 + 320);
v11 = v6;
v56 = 100;
v60 = v6;
v52 = 0;
v59 = v6;
v62 = v10;
v63 = v10;
v57 = v7;
v64 = v7;
if( PpmPerfArtificialDomainEnabled == (_DWORD)v6
|| (IsSubsetAffinity = KeIsSubsetAffinityEx((_KAFFINITY_EX *)(a1 + 24), &PpmPerfNewCoreParkingMask),
v7 = v57,
v8 = 0,
v6 = 0i64,
IsSubsetAffinity)
|| *(_DWORD *)(a1 + 208) != v11 )
{
v12 = *(INT64 **)a1;
v13 = a1;
}
else
{
v13 = PpmPerfDomainHead;
v12 = &PpmPerfDomainHead;
}
if( (INT64 *)v13 != v12 )
{
v14 = v11;
while( 1 )
{
v15 = *(unsigned int *)(v13 + 364);
if( v13 == a1 )
goto LABEL_6;
if( !*(_DWORD *)(v13 + 208)
&& !(unsigned int)KeIsSubsetAffinityEx((_KAFFINITY_EX *)(v13 + 24), &PpmPerfNewCoreParkingMask)
&& *(_QWORD *)(*(_QWORD *)(a1 + 16) - 32936i64) == *(_QWORD *)(*(_QWORD *)(v13 + 16) - 32936i64) )
{
v49 = *(_BYTE *)(a1 + 204);
v50 = *(_BYTE *)(v13 + 204);
if( v49 == v50 || PpmPerfQosEnabled )
break;
}
LABEL_11:
v13 = *(_QWORD *)v13;
if( (INT64 *)v13 == v12 )
{
v16 = v63;
v6 = 0i64;
v7 = v64;
v8 = v52;
v59 = v14;
v9 = v56;
v60 = v11;
v62 = v63;
v57 = v64;
goto LABEL_13;
}
}
if( *(_BYTE *)(a1 + 205) != *(_BYTE *)(v13 + 205) )
{
v15 = (*(_QWORD *)(v13 + 344) * v15 + (*(_QWORD *)(v13 + 344) >> 1)) / *(_QWORD *)(a1 + 344);
if( (unsigned int)v15 > *(_DWORD *)(a1 + 320) )
LODWORD(v15) = *(_DWORD *)(a1 + 320);
}
if( v49 != v50 )
{
if( (unsigned int)v15 <= v14 )
LODWORD(v15) = v14;
v14 = v15;
goto LABEL_11;
}
LABEL_6:
if( (unsigned int)v15 <= v11 )
LODWORD(v15) = v11;
v11 = v15;
if( *(_BYTE *)(v13 + 372) )
v52 = 1;
v53 |= PpmPerfApplyCapsAndFloors(&v63, &v64, &v56, v13);
goto LABEL_11;
}
v16 = v62;
LABEL_13:
v17 = v6;
v18 = v6;
while( 1 )
{
if( *(_DWORD *)(a1 + 4 * v18 + 516) )
{
v19 = (__int128 *)(a1 + 8 * (v17 - 1 + 4i64 * (v17 - 1) + 69));
goto LABEL_17;
}
v58 = v6;
v22 = 28 * v18 + a1 + 376;
v23 = v6;
if( *(_BYTE *)(v22 + 21) )
{
v24 = *(_DWORD *)(a1 + 328);
v23 = 1;
v58 = 1;
}
else
{
v24 = *(_DWORD *)(a1 + 324);
}
if( v24 <= *(_DWORD *)(v22 + 8) )
v24 = *(_DWORD *)(v22 + 8);
v25 = *(_BYTE *)(v22 + 22);
if( v25 )
{
v26 = *(_DWORD *)(a1 + 320);
}
else
{
v23 |= 8u;
v26 = v9;
v58 = v23;
if( !PpmPerfBoostAtGuaranteed )
v26 = 100;
}
if( *(_DWORD *)v22 < 0x64u && v26 >= *(_DWORD *)v22 )
v26 = *(_DWORD *)v22;
if( v26 >= *(_DWORD *)(v22 + 4) )
v26 = *(_DWORD *)(v22 + 4);
if( PpmPerfMaxOverrideEnabled )
{
v27 = 100;
}
else if( PpmCheckLatencyBoostActive )
{
v27 = *(unsigned __int8 *)(v22 + 23);
}
else if( v8 )
{
v27 = *(_DWORD *)(v67 + 4i64 * v54 + 112);
}
else
{
v27 = 0;
}
if( v27 >= v26 )
v27 = v26;
v28 = v27 > v24 ? v27 : v24;
if( v28 < v9 )
{
v29 = v24;
if( v27 > v24 )
v29 = v27;
}
else
{
v29 = v9;
}
if( v29 > v7 )
{
if( v27 > v24 )
v30 = v27;
else
v30 = v24;
if( v30 < v9 )
{
v7 = v24;
if( v27 > v24 )
v7 = v27;
}
else
{
v7 = v9;
}
}
v61 = v7;
v31 = v26 > v24 ? v26 : v24;
if( v31 < v16 )
{
v32 = v26;
if( v26 <= v24 )
v32 = v24;
}
else
{
v32 = v16;
}
if( v32 <= v57 )
{
v26 = v57;
}
else
{
v33 = v26 > v24 ? v26 : v24;
if( v33 < v16 )
{
if( v26 <= v24 )
v26 = v24;
}
else
{
v26 = v16;
}
}
if( PpmPerfMaxOverrideEnabled )
{
v34 = v26;
v35 = v26;
}
else
{
if( *(_BYTE *)(v22 + 24) )
{
v34 = v60;
if( v60 <= v59 )
v34 = v59;
}
else
{
v34 = v60;
}
v35 = v34;
if( v34 > v26 )
{
v35 = v26;
v51 = v23 | 2;
if( !v53 )
v51 = v23;
v23 = v51;
v58 = v51;
goto LABEL_71;
}
}
if( v34 < v7 )
v35 = v7;
LABEL_71:
if( v25 == 2 || (unsigned __int8)(v25 - 4) <= 2u )
{
v36 = (unsigned __int8)(v25 - 5) <= 1u || PpmPerfBoostAtGuaranteed ? v9 : 100;
if( (unsigned int)v35 >= v36 )
v35 = v26;
}
if( PpmPerfMaxOverrideEnabled )
v37 = 0;
else
v37 = *(_DWORD *)(v67 + 60);
v38 = v34 - v37;
v39 = v37 < v34;
v40 = v7;
if( !v39 )
v38 = 0;
if( v38 >= v7 )
v40 = v38;
v65 = v40;
if( v40 > v9 )
v65 = v9;
if( PpmPerfMaxOverrideEnabled || PpmCheckDeadlineBoostActive )
v41 = 0;
else
v41 = *(_DWORD *)(v22 + 16);
if( v52 && v41 >= *(_DWORD *)(v67 + 4i64 * v54 + 104) )
v41 = *(_DWORD *)(v67 + 4i64 * v54 + 104);
v42 = *(_BYTE *)(v22 + 20);
if( !v42 )
v58 = v23 | 4;
v43 = (*(__int64(__fastcall **)(__int64, __int64, _QWORD, _QWORD, unsigned int, _DWORD, int, unsigned int *, __int64 *))(a1 + 280))(
v69,
v35,
v7,
v26,
v41,
*(_DWORD *)(v22 + 12),
v58,
&v66,
&v68);
v44 = v65;
if( v65 > v43 )
v44 = v43;
HIDWORD(v72) = v42 == 0;
*(_QWORD *)&v70 = v68;
*(_QWORD *)&v71 = __PAIR64__(v26, v61);
LODWORD(v72) = *(_DWORD *)(v22 + 12);
*((_QWORD *)&v70 + 1) = __PAIR64__(v66, v43);
*((_QWORD *)&v71 + 1) = __PAIR64__(v41, v44);
if( !v17 && *(_QWORD *)(a1 + 304) )
BYTE5(v72) = 1;
v3 = v55;
v19 = &v70;
LABEL_17:
if( *(_BYTE *)(a1 + 764)
|| (v20 = *((_BYTE *)v19 + 36), *(_BYTE *)(a1 + 40 * v18 + 588) != v20)
|| *(_DWORD *)(a1 + 40 * v18 + 568) != *((_DWORD *)v19 + 4)
|| *(_DWORD *)(a1 + 40 * v18 + 572) != *((_DWORD *)v19 + 5)
|| *(_DWORD *)(a1 + 40 * v18 + 580) != *((_DWORD *)v19 + 7) )
{
v9 = v56;
LABEL_98:
v3 = 1;
v55 = 1;
*(_OWORD *)(a1 + 40 * v18 + 552) = *v19;
*(_OWORD *)(a1 + 40 * v18 + 568) = v19[1];
*(_QWORD *)(a1 + 40 * v18 + 584) = *((_QWORD *)v19 + 4);
goto LABEL_28;
}
v9 = v56;
if( *(_DWORD *)(a1 + 40 * v18 + 584) != *((_DWORD *)v19 + 8)
|| *(_QWORD *)(a1 + 40 * v18 + 552) != *(_QWORD *)v19
|| v56 != *(_DWORD *)(a1 + 368)
|| !v20
&& (*(_DWORD *)(a1 + 40 * v18 + 576) != *((_DWORD *)v19 + 6)
|| *(_DWORD *)(a1 + 40 * v18 + 560) != *((_DWORD *)v19 + 2)) )
{
goto LABEL_98;
}
LABEL_28:
v16 = v62;
++v17;
v7 = v57;
++v18;
v8 = v52;
if( v17 >= 5 )
break;
LODWORD(v6) = 0;
}
if( v3 )
{
v45 = *(_DWORD *)(a1 + 548) + 1;
if( *(_DWORD *)(a1 + 548) == -1 )
v45 = 1;
*(_DWORD *)(a1 + 368) = v56;
*(_DWORD *)(a1 + 548) = v45;
*(_BYTE *)(a1 + 764) = 0;
*(LARGE_INTEGER *)(a1 + 752) = KeQueryPerformanceCounter(0i64);
*(_DWORD *)(a1 + 760) = 0;
PpmEventDomainPerfStateChange(a1, v46, v47);
}
return v3;
}Referenced by:
PpmPerfApplyDomainStates