PpmPerfRecordUtility
__int64 __fastcall PpmPerfRecordUtility(__int64 a1){
__int64 *v1;
unsigned __int8 *v3;
__int64 result;
__int64 v5;
__int64 v6;
unsigned __int64 v7;
__int64 v8;
__int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
int v12;
int v13;
int v14;
int v15;
unsigned int v16;
unsigned __int64 v17;
unsigned __int64 v18;
EVENT_DESCRIPTOR *v19;
UINT64 v20;
__int64 v21;
INT64 Keyword;
unsigned __int8 v23;
unsigned int *v24;
int v25;
int v26;
unsigned int v27;
unsigned int v28;
char v29;
unsigned __int64 v30;
unsigned int v31;
__int64 v32;
char *v33;
int v34;
int v35;
unsigned int v36;
unsigned int v37;
UINT64 UserDataCount;
__int16 v39;
int v40;
int v41;
__int64 v42;
unsigned __int8 *v43;
__int64 v44;
unsigned __int64 v45;
unsigned __int64 v46;
unsigned __int64 v47;
EVENT_DATA_DESCRIPTOR UserData;
__int64 *v49;
__int64 v50;
__int64 *v51;
__int64 v52;
__int64 *v53;
__int64 v54;
int *v55;
__int64 v56;
__int64 *v57;
__int64 v58;
__int64 *v59;
__int64 v60;
int *v61;
__int64 v62;
__int16 *v63;
__int64 v64;
__int64 v65;
__int64 v66;
__int64 *v67;
__int64 v68;
v1 = *(__int64 **)(a1 + 16);
v3 = *(unsigned __int8 **)(a1 + 24);
result = (unsigned int)PpmCheckMakeupCount;
v5 = *(_QWORD *)(a1 + 8);
v43 = v3;
if( v1 )
{
v6 = *v1;
v7 = v1[5] - *v1;
v8 = v1[2];
v9 = v1[1];
v10 = v1[4] - v9;
v11 = v1[6] - v8;
v12 = *((_DWORD *)v1 + 30) - *((_DWORD *)v1 + 6);
if( (_DWORD)PpmCheckMakeupCount )
{
v30 = v10 / (unsigned int)(PpmCheckMakeupCount + 1);
v3 = v43;
v10 = v30;
if( v7 < v30 )
v30 = v1[5] - *v1;
v7 = v30;
if( v11 >= v10 )
v11 = v10;
}
v1[1] = v9 + v10;
*v1 = v6 + v7;
v1[2] = v11 + v8;
*((_DWORD *)v1 + 6) = *((_DWORD *)v1 + 30);
if( v7 > v10 )
v7 = v10;
if( v11 > v10 )
v11 = v10;
if( v10 <= 1 )
v10 = 1i64;
if( v3 )
{
result = *v3;
*(_DWORD *)(a1 + 40) = *v3 * v3[1];
}
else
{
v13 = *(unsigned __int16 *)(a1 + 52);
if( v5 )
{
v14 = *(_DWORD *)(v5 + 116);
v15 = *(_DWORD *)(v5 + 120);
}
else
{
v14 = 100;
v15 = 100;
}
LODWORD(v44) = v14;
v16 = 0;
LOBYTE(v39) = 100;
LODWORD(v43) = v15;
v47 = v11;
v46 = v7;
v41 = 0;
v17 = v7 * (unsigned int)(100 * v15) / v10;
LOWORD(v42) = v17;
v18 = v7 * (unsigned int)(v13 * v15) / v10;
v45 = v10 - v7;
LOWORD(v40) = v18;
if( *(_BYTE *)(a1 + 60) )
{
v19 = (EVENT_DESCRIPTOR *)&PPM_ETW_RECORDED_UTILITY;
LOWORD(v41) = *(unsigned __int8 *)(a1 - 32920);
BYTE2(v41) = *(_BYTE *)(a1 - 32919);
v56 = 3i64;
}
else
{
v19 = (EVENT_DESCRIPTOR *)PPM_ETW_RECORDED_UTILITY_HV;
v41 = *(_DWORD *)(*(_QWORD *)(a1 + 8) + 20i64);
v56 = 4i64;
}
v55 = &v41;
if( PpmEtwRegistered )
{
v20 = PpmEtwHandle;
if( PpmEtwHandle )
{
if( (v21 = *(_QWORD *)(PpmEtwHandle + 32), Keyword = v19->Keyword, *(_DWORD *)(v21 + 96))
&& ((v23 = *(_BYTE *)(v21 + 100), v19->Level <= v23) || !v23)
&& ((*(_DWORD *)(v21 + 104) & 0x40) != 0 && !Keyword
|| (Keyword & *(_QWORD *)(v21 + 112)) != 0 && (*(_QWORD *)(v21 + 120) & Keyword) == *(_QWORD *)(v21 + 120))
|| *(_BYTE *)(PpmEtwHandle + 101)
&& EtwpLevelKeywordEnabled(*(_QWORD *)(PpmEtwHandle + 40) + 96i64, v19->Level, Keyword) )
{
*(_QWORD *)&UserData.Size = 8i64;
UserData.Ptr = (unsigned __int64)&PpmCheckTime;
v50 = 8i64;
v49 = (__int64 *)&v45;
v52 = 8i64;
v51 = (__int64 *)&v46;
v54 = 4i64;
v53 = &v44;
v58 = 4i64;
v57 = (__int64 *)&v43;
v59 = &v42;
v61 = &v40;
v63 = &v39;
v65 = (__int64)v1 + 329;
v67 = (__int64 *)&v47;
LODWORD(UserDataCount) = 11;
v60 = 2i64;
v62 = 2i64;
v64 = 1i64;
v66 = 1i64;
v68 = 8i64;
EtwWriteEx(v20, v19, 0i64, 0i64, 0i64, 0i64, UserDataCount, &UserData);
}
}
}
v24 = *(unsigned int **)(a1 + 32);
if( v24 )
{
v31 = *v24;
v32 = v24[1];
v33 = (char *)v24 + 10 * v32;
v24[2] += (unsigned __int16)v17 - *((unsigned __int16 *)v33 + 16);
v34 = *((unsigned __int16 *)v33 + 17);
*((_WORD *)v33 + 16) = v17;
v24[3] += (unsigned __int16)v18 - v34;
v35 = *((unsigned __int16 *)v33 + 18);
*((_WORD *)v33 + 17) = v18;
v24[4] += (unsigned __int16)v15 - v35;
*((_WORD *)v33 + 18) = v15;
v24[5] -= (unsigned __int8)v33[38];
v24[5] += *((unsigned __int8 *)v1 + 328);
v33[38] = *((_BYTE *)v1 + 328);
v24[6] -= (unsigned __int8)v33[39];
v24[6] += *((unsigned __int8 *)v1 + 329);
v33[39] = *((_BYTE *)v1 + 329);
v24[7] -= (unsigned __int8)v33[40];
v24[7] += *((unsigned __int8 *)v1 + 330);
v33[40] = *((_BYTE *)v1 + 330);
if( (_DWORD)v32 + 1 != v31 )
v16 = v32 + 1;
v36 = v24[2];
v24[1] = v16;
LODWORD(v17) = v36 / v31;
LODWORD(v18) = v24[3] / v31;
v15 = v24[4] / v31;
v25 = v24[6] / v31;
}
else
{
LOWORD(v40) = *((_WORD *)v1 + 164);
LOBYTE(v25) = BYTE1(v40);
}
if( (unsigned __int8)v25 >= 0x64u )
LOBYTE(v25) = 100;
v26 = (unsigned __int8)v25;
v27 = v17 * (unsigned __int8)v25;
result = 1374389535 * v27;
v28 = v27 / 0x64;
if( PpmCheckCurrentPipelineId == 5 )
{
v37 = v18 * v26;
LODWORD(v17) = v17 - v28;
v29 = 1;
result = 1374389535 * v37;
LODWORD(v18) = v18 - v37 / 0x64;
}
else
{
v29 = 0;
}
*(_DWORD *)(a1 + 40) = v17;
*(_DWORD *)(a1 + 44) = v18;
*(_DWORD *)(a1 + 48) = v28;
*(_WORD *)(a1 + 54) = v15;
*((_DWORD *)v1 + 84) = v12;
if( v29 )
return PpmPerfResetHistory(a1);
}
}
return result;
}Referenced by:
PpmCheckRecordAllUtility