PopCalculateCsSummary
__int64 __fastcall PopCalculateCsSummary(__int64 a1, UINT64 *a2){
int v3;
__int64 v4;
__int64 v5;
unsigned __int64 v6;
unsigned __int64 v7;
unsigned int EnergyDrainFromDischage;
__int64 v9;
int v10;
UINT64 v11;
__int64 v12;
unsigned __int64 v13;
unsigned __int64 v14;
__int64 v15;
unsigned __int64 v16;
char v17;
int v18;
int v19;
__int128 v20;
char v21;
char v22;
__int64 v23;
__int64 v24;
unsigned __int8 v25;
unsigned __int64 v26;
__int64 result;
int v28;
int v29;
NTSTATUS ModernStandbyTransitionReason;
UINT64 PreVetoCount;
UINT64 VetoCount;
__int64 v33;
INT64 v34;
unsigned __int64 v35;
INT64 CurrentQpc;
__int64 v37;
UINT64 v38;
UINT64 v39;
unsigned __int64 v40;
UINT64 v41;
__int128 v42;
UINT64 HwDripsResidency[2];
__int128 v44;
SYSTEM_BATTERY_STATE PowerState;
int v46;
int v47;
int v48;
int v49;
v34 = 0i64;
memset(&PowerState, 0, sizeof(PowerState));
CurrentQpc = 0i64;
v3 = (int)a2;
LOBYTE(v35) = 0;
v44 = 0i64;
v42 = 0i64;
*(_OWORD *)HwDripsResidency = 0i64;
PopCalculateIdleInformation((__int64)&v42, a2);
LODWORD(v4) = RtlGetInterruptTimePrecise(&CurrentQpc);
v5 = v4;
v6 = (v4 - qword_140C4FC48) / 0xAui64;
PopGetModernStandbyTransitionReason(0, &v34);
if( v34 <= (unsigned __int64)qword_140C4FC48 )
v7 = 0i64;
else
v7 = (v5 - v34) / 0xAui64;
PopCurrentPowerState(&PowerState);
if( v6 )
{
EnergyDrainFromDischage = PopBatteryGetEnergyDrainFromDischage(
(_MMPFN *)(unsigned int)Pfn1,
(VOID *)PowerState.RemainingCapacity);
v46 = PopBatteryCapacityToRate(EnergyDrainFromDischage, v6);
}
else
{
v46 = 0;
}
v9 = PopMeasureEnergyChange((__int64)&v44, (__int64)&CsSessionEnergyCounter);
v49 = qword_140C23580;
if( (_DWORD)qword_140C23580 )
LODWORD(v9) = 100 * HIDWORD(qword_140C23580) / (unsigned int)qword_140C23580;
else
LOBYTE(v9) = 0;
v10 = 0;
if( (unk_140C23574 & 0x40000000) == 0 )
v10 = HIDWORD(qword_140C23580);
v48 = v9;
v37 = *((_QWORD *)&v42 + 1) - qword_140C4FC50;
v28 = v10;
v29 = LODWORD(HwDripsResidency[1]) - dword_140C4FC60;
v11 = PopCalculateTotalHwDripsResidency(InitialHwDripsResidency, HwDripsResidency[0], v6);
v12 = v6 + qword_140C4FC58 - v42;
v41 = v11;
v13 = _InterlockedExchangeAdd64(qword_140C4FD80, 0i64);
if( v13 )
v13 = (v13 - qword_140C4FC48) / 0xA;
v33 = qword_140C4FC90;
v33 -= PpmConvertTime(SourceTime, PopQpcFrequency, 0xF4240ui64);
v14 = qword_140C4FCA0;
v40 = v6 - qword_140C4FC90;
if( qword_140C4FC98 )
{
if( qword_140C4FC48 <= (unsigned __int64)qword_140C4FC98 )
v15 = v5 - qword_140C4FC98;
else
v15 = v5 - qword_140C4FC48;
v14 = v15 + qword_140C4FCA0;
}
v16 = v14 / 0xA;
v38 = PpmConvertTime(qword_140C4FCB0, PopQpcFrequency, 0xF4240ui64);
v39 = PpmConvertTime(CpuBusyTime, PopQpcFrequency, 0xF4240ui64);
PreVetoCount = 0i64;
VetoCount = 0i64;
ModernStandbyTransitionReason = PopGetModernStandbyTransitionReason(0, 0i64);
PpmGetPlatformSelectionVetoCounts((unsigned int)PlatformIdleStateIndex, &PreVetoCount, &VetoCount);
PreVetoCount -= qword_140C4FCE0;
VetoCount -= qword_140C4FCE8;
if( qword_140C4FC68 )
v35 = 100 * qword_140C4FC70 / (unsigned __int64)qword_140C4FC68;
v47 = 0;
PopQueryInputSuppressionCount(&v47);
v18 = v47 - dword_140C4FD38;
v19 = v49;
v20 = v44;
*(_DWORD *)a1 = v46;
*(_QWORD *)(a1 + 40) = v37;
*(_DWORD *)(a1 + 56) = v29;
*(_QWORD *)(a1 + 72) = v33;
*(_QWORD *)(a1 + 96) = v38;
*(_QWORD *)(a1 + 104) = v39;
*(_QWORD *)(a1 + 80) = v40;
*(_DWORD *)(a1 + 116) = ModernStandbyTransitionReason;
*(_QWORD *)(a1 + 128) = v41;
*(_BYTE *)(a1 + 160) = v35;
v21 = 2 * v48;
*(_DWORD *)(a1 + 24) = v19;
*(_BYTE *)(a1 + 124) = v17 & 1 ^ v21;
v22 = *(_BYTE *)(a1 + 125);
*(_DWORD *)(a1 + 28) = v28;
*(_OWORD *)(a1 + 8) = v20;
*(_QWORD *)(a1 + 32) = v6;
*(_QWORD *)(a1 + 48) = v12;
*(_QWORD *)(a1 + 64) = v13;
*(_QWORD *)(a1 + 88) = v16;
*(_DWORD *)(a1 + 120) = v3;
*(_QWORD *)(a1 + 136) = v23;
*(_QWORD *)(a1 + 144) = v24;
*(_QWORD *)(a1 + 152) = v7;
v47 = v18;
*(_BYTE *)(a1 + 125) ^= (byte_140C4FD01 ^ v22) & 1;
LOBYTE(v19) = *(_BYTE *)(a1 + 125) ^ (byte_140C4FD01 ^ *(_BYTE *)(a1 + 125)) & 2;
*(_BYTE *)(a1 + 125) = v19;
*(_BYTE *)(a1 + 125) = v19 ^ (byte_140C4FD01 ^ v19) & 4;
*(_DWORD *)(a1 + 164) = dword_140C4FCF0;
*(_DWORD *)(a1 + 168) = dword_140C4FCF4;
*(_BYTE *)(a1 + 172) = byte_140C4FCF8;
*(_DWORD *)(a1 + 176) = dword_140C4FCFC;
*(_DWORD *)(a1 + 180) = dword_140C4FD04;
*(_DWORD *)(a1 + 184) = dword_140C4FD08;
*(_BYTE *)(a1 + 188) = byte_140C4FD0C;
*(_DWORD *)(a1 + 192) = PowerState.RemainingCapacity;
*(_DWORD *)(a1 + 196) = PowerState.MaxCapacity;
*(_BYTE *)(a1 + 204) = byte_140C4FD14;
*(_BYTE *)(a1 + 205) = byte_140C4FD15;
*(_DWORD *)(a1 + 208) = dword_140C4FD18;
*(_DWORD *)(a1 + 212) = dword_140C4FD1C;
*(_DWORD *)(a1 + 216) = v18;
*(_QWORD *)(a1 + 224) = qword_140C4FCC8;
*(_QWORD *)(a1 + 232) = qword_140C4FCD0;
*(_DWORD *)(a1 + 264) = dword_140C4FD3C;
*(_DWORD *)(a1 + 268) = dword_140C4FD40;
v25 = KeAcquireSpinLockRaiseToDpc(&qword_140C22E38);
*(_QWORD *)(a1 + 248) = qword_140C22E28;
*(_QWORD *)(a1 + 240) = qword_140C22E30;
*(_QWORD *)(a1 + 256) = PopDisplayOnPerformance;
v26 = v25;
KxReleaseSpinLock(&qword_140C22E38);
result = (unsigned int)KiIrqlFlags;
__writecr8(v26);
return result;
}Referenced by:
PopCaptureSleepStudyStatistics