PpmCheckComputeEnergy
UINT8 __stdcall PpmCheckComputeEnergy(){
unsigned __int64 v0;
unsigned __int16 v1;
unsigned __int64 v2;
__int64 v3;
__int64 v4;
__int64 v5;
__int64 v6;
__int64 v7;
__int64 v8;
__int64 v9;
unsigned int v10;
unsigned int v11;
unsigned int v12;
__int64 v13;
__int64 v14;
unsigned int v15;
REGHANDLE v16;
_KPRCB *Prcb;
unsigned int v19;
UINT64 ProcessorNumber;
__int64 v21[3];
__int64 v22;
__int128 v23;
__int128 v24;
_EVENT_DATA_DESCRIPTOR UserData;
__int64 *v26;
__int64 v27;
v21[0] = 0i64;
if( *(&stru_140C23628 + 763) )
{
v0 = KeActiveProcessors.Bitmap[0];
v1 = 0;
ProcessorNumber = 0x4000000040i64;
v24 = 0i64;
v23 = 0i64;
while( v0 )
{
LABEL_4:
_BitScanForward64(&v2, v0);
v0 &= ~(1i64 << v2);
v3 = (unsigned int)KiProcessorNumberToIndexMappingTable[64 * v1 + (unsigned __int8)v2];
if( (unsigned int)v3 >= (unsigned int)KeNumberProcessors_0 )
{
v4 = 0i64;
}
else
{
_mm_lfence();
v4 = (__int64)*(&KiProcessorBlock + v3);
}
v5 = *(unsigned __int8 *)(v4 + 33208);
v6 = 4 * v5;
*((_DWORD *)&v21[-1] + v5) = v3;
v7 = 8 * v5;
*(_QWORD *)((char *)&v24 + v7) += *(_QWORD *)(v4 + 33224);
*(_QWORD *)((char *)&v23 + v7) += *(_QWORD *)(v4 + 33232);
v8 = *(_QWORD *)(v4 + 33128);
v9 = *(_QWORD *)(v4 + 33136);
if( v8 && v9 )
{
if( *(_BYTE *)(v9 + 100) )
{
v10 = *(_DWORD *)(v9 + 116);
}
else
{
v10 = *(_DWORD *)(v9 + 72);
v11 = *(_DWORD *)(v8 + 368);
if( v10 >= v11 )
v10 = v11;
}
}
else
{
v10 = 100;
}
*(_DWORD *)((char *)&v21[2] + v6) = v10;
*(_QWORD *)(v4 + 33224) = 0i64;
*(_QWORD *)(v4 + 33232) = 0i64;
}
while( ++v1 < (unsigned int)KeActiveProcessors.Count )
{
v0 = KeActiveProcessors.Bitmap[v1];
if( v0 )
goto LABEL_4;
}
v12 = 0;
v13 = 0i64;
v14 = 0i64;
do
{
v15 = *(_DWORD *)((char *)&v21[-1] + v13);
if( v15 != 64 )
{
(*(&stru_140C23628 + 763))(
v12,
*(_QWORD *)((char *)&v24 + v14),
*(_QWORD *)((char *)&v23 + v14),
*(unsigned int *)((char *)&v21[2] + v13),
v21);
v22 = v21[0];
v19 = v12;
if( PpmEtwRegistered )
{
v16 = PpmEtwHandle;
if( EtwEventEnabled(PpmEtwHandle, &PPM_ETW_COMPUTE_ENERGY) )
{
*(_QWORD *)&UserData.Size = 4i64;
UserData.Ptr = (unsigned __int64)&v19;
v27 = 8i64;
v26 = &v22;
EtwWriteEx(v16, &PPM_ETW_COMPUTE_ENERGY, 0i64, 0, 0, 0, 2u, &UserData);
}
}
Prcb = KeGetPrcb(v15);
Prcb->PowerState.SnapTimeLast += v21[0];
}
++v12;
v13 += 4i64;
v14 += 8i64;
}
while( v12 < 2 );
}
return 1;
}Referenced by:
No references.