PopTransitionTelemetryOsState
UINT64 __stdcall PopTransitionTelemetryOsState(
POP_TELEMETRY_OS_STATE_TRANSITION TransitionType,
POP_TELEMETRY_OS_STATE_SUBTRANSITION SubtransitionType){
unsigned int v4;
char **v6;
int v7;
UINT64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
__int64 v12;
unsigned int v13;
unsigned int MaxCapacity;
__int16 v15;
__int16 v16;
int v17;
int v18;
int v19;
int v20;
int v21;
int v22;
unsigned int BootId;
int v24;
int v25;
unsigned int v26;
unsigned int v27;
unsigned int v28;
int v29;
int AcOnLine;
__int64 v31;
__int64 v32;
unsigned __int64 v33;
__int64 v34;
int v35;
int v36;
int v37;
int v38;
int v39;
int v40;
unsigned __int64 v41;
__int64 v42;
unsigned __int64 v43;
UINT64 v44;
__int64 v45;
__int64 v46;
__int128 v47;
SYSTEM_BATTERY_STATE PowerState;
_EVENT_DATA_DESCRIPTOR v49;
__int16 *v50;
__int64 v51;
__int16 *v52;
__int64 v53;
__int64 *v54;
__int64 v55;
unsigned int *p_BootId;
__int64 v57;
__int64 *v58;
__int64 v59;
__int64 *v60;
__int64 v61;
__int64 *v62;
__int64 v63;
__int64 *v64;
__int64 v65;
int *v66;
__int64 v67;
int *v68;
__int64 v69;
int *v70;
__int64 v71;
int *v72;
__int64 v73;
int *v74;
__int64 v75;
int *v76;
__int64 v77;
int *v78;
__int64 v79;
__int64 *v80;
__int64 v81;
int *v82;
__int64 v83;
int *p_AcOnLine;
__int64 v85;
__int64 *v86;
__int64 v87;
__int64 *v88;
__int64 v89;
v4 = 0;
*(_OWORD *)&PowerState.AcOnLine = 0i64;
v47 = 0i64;
if( !*(&stru_140C00F40 + 1194)
|| !tlgKeywordOn((__int64)&stru_140C00F40 + 4776, 0x800000000000i64)
|| !byte_140C22C0C )
{
return v4;
}
switch( TransitionType )
{
case PopTelemetryOsStateTransitionShutdown:
if( SubtransitionType == PopTelemetryOsStateSubtransitionReboot )
{
if( dword_140C0EDAC < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0EDA8 )
dword_140C0EDA8 = TelemetryCoverageStringHashInternal(off_140C0EDA0, &v32);
v6 = &off_140C0EDA0;
goto LABEL_67;
}
}
else if( dword_140C0ED64 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED60 )
dword_140C0ED60 = TelemetryCoverageStringHashInternal((_BYTE *)off_140C0ED58, &v33);
v6 = (char **)&off_140C0ED58;
goto LABEL_67;
}
break;
case PopTelemetryOsStateTransitionSuspend:
switch( SubtransitionType )
{
case PopTelemetryOsStateSubtransitionHiberboot:
if( dword_140C0ED4C < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED48 )
dword_140C0ED48 = TelemetryCoverageStringHashInternal(off_140C0ED40, &v37);
v6 = &off_140C0ED40;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionStandby:
if( dword_140C0ED94 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED90 )
dword_140C0ED90 = TelemetryCoverageStringHashInternal(off_140C0ED88, &v36);
v6 = &off_140C0ED88;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionHibernate:
if( dword_140C0ED7C < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED78 )
dword_140C0ED78 = TelemetryCoverageStringHashInternal(off_140C0ED70, &v35);
v6 = &off_140C0ED70;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionConnectedStandby:
if( dword_140C0ED04 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED00 )
dword_140C0ED00 = TelemetryCoverageStringHashInternal(off_140C0ECF8, &v40);
v6 = &off_140C0ECF8;
goto LABEL_67;
}
break;
default:
if( SubtransitionType == PopTelemetryOsStateSubtransitionHybridSleep
&& dword_140C0ECEC < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ECE8 )
dword_140C0ECE8 = TelemetryCoverageStringHashInternal(off_140C0ECE0, &v39);
v6 = &off_140C0ECE0;
goto LABEL_67;
}
break;
}
break;
case PopTelemetryOsStateTransitionResume:
switch( SubtransitionType )
{
case PopTelemetryOsStateSubtransitionHiberboot:
if( dword_140C0ED34 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED30 )
dword_140C0ED30 = TelemetryCoverageStringHashInternal(off_140C0ED28, &v38);
v6 = &off_140C0ED28;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionStandby:
if( dword_140C0ED1C < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ED18 )
dword_140C0ED18 = TelemetryCoverageStringHashInternal(off_140C0ED10, &v19);
v6 = &off_140C0ED10;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionHibernate:
if( dword_140C0ECBC < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ECB8 )
dword_140C0ECB8 = TelemetryCoverageStringHashInternal(off_140C0ECB0, &v20);
v6 = &off_140C0ECB0;
goto LABEL_67;
}
break;
case PopTelemetryOsStateSubtransitionConnectedStandby:
if( dword_140C0ECA4 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ECA0 )
dword_140C0ECA0 = TelemetryCoverageStringHashInternal(off_140C0EC98, &v21);
v6 = &off_140C0EC98;
goto LABEL_67;
}
break;
default:
if( SubtransitionType == PopTelemetryOsStateSubtransitionHybridSleep
&& dword_140C0ECD4 < KUSER_SHARED_DATA.TelemetryCoverageRound )
{
if( !dword_140C0ECD0 )
dword_140C0ECD0 = TelemetryCoverageStringHashInternal(off_140C0ECC8, &v22);
v6 = &off_140C0ECC8;
LABEL_67:
EtwTelemetryCoverageReport((INT64)v6);
}
break;
}
break;
}
PopAcquireRwLockExclusive(&PopTelemetryOsState);
v4 = dword_140C22C08;
if( TransitionType != PopTelemetryOsStateTransitionHeartbeat
|| dword_140C22BD0 == 1
|| (unsigned int)(dword_140C22BD0 - 4) <= 1 )
{
v8 = (KiQueryUnbiasedInterruptTime(1u) - qword_140C22BE8) / 0x2710;
v9 = v8 - qword_140C22BF8;
v10 = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C22BE0) / 0x2710ui64;
qword_140C22BF8 = v8;
v11 = v10 - qword_140C22BF0;
v33 = v10 - qword_140C22BF0;
v12 = v10 - qword_140C22BF0;
qword_140C22BF0 = v10;
if( v9 <= v11 )
v12 = v9;
v32 = v12;
v21 = v7 + dword_140C22C00;
dword_140C22C00 += v7;
v19 = dword_140C22BD0;
v20 = dword_140C22BD4;
if( TransitionType != PopTelemetryOsStateTransitionHeartbeat )
{
dword_140C22C04 += v7;
dword_140C22BD0 = TransitionType;
dword_140C22BD4 = SubtransitionType;
}
if( TransitionType == v7 || TransitionType == PopTelemetryOsStateTransitionResume )
dword_140C22C08 += v7;
v4 = dword_140C22C08;
v22 = dword_140C22C04;
PopReleaseRwLock(&PopTelemetryOsState);
PopCurrentPowerState(&PowerState);
v13 = 0;
MaxCapacity = PowerState.MaxCapacity;
if( PowerState.MaxCapacity )
v13 = 100 * PowerState.RemainingCapacity / PowerState.MaxCapacity;
PopMeasureEnergyChange((__int64)&v47, (__int64)&OsStateChangeEnergyCounter);
v34 = qword_140C22BD8;
if( *(&stru_140C00F40 + 1194) > 5u && tlgKeywordOn((__int64)&stru_140C00F40 + 4776, 0x800000000000i64) )
{
v15 = TransitionType;
v50 = &v15;
v52 = &v16;
v41 = v33;
v54 = (__int64 *)&v41;
v51 = 2i64;
v16 = SubtransitionType;
v53 = 2i64;
v55 = 8i64;
BootId = KUSER_SHARED_DATA.BootId;
p_BootId = &BootId;
v58 = &v34;
v42 = v32;
v60 = &v42;
v62 = (__int64 *)&v43;
v64 = (__int64 *)&v44;
LOWORD(v17) = v19;
v66 = &v17;
LOWORD(v18) = v20;
v68 = &v18;
v24 = v21;
v70 = &v24;
v25 = v22;
v72 = &v25;
v74 = (int *)&v26;
v76 = (int *)&v27;
v78 = (int *)&v28;
v45 = *((_QWORD *)&v47 + 1);
v80 = &v45;
v29 = v47;
v82 = &v29;
AcOnLine = PowerState.AcOnLine;
p_AcOnLine = &AcOnLine;
v57 = 4i64;
v59 = 8i64;
v61 = 8i64;
v43 = v10;
v63 = 8i64;
v44 = v8;
v65 = 8i64;
v67 = 2i64;
v69 = 2i64;
v71 = 4i64;
v73 = 4i64;
v26 = v4;
v75 = 4i64;
v27 = MaxCapacity;
v77 = 4i64;
v28 = v13;
v79 = 4i64;
v81 = 8i64;
v83 = 4i64;
v85 = 4i64;
LODWORD(v31) = PowerState.Discharging;
v87 = 4i64;
v86 = &v31;
v46 = 0x1000000i64;
v88 = &v46;
v89 = 8i64;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&stru_140C00F40 + 4776,
(unsigned __int8 *)byte_140026E0D,
0i64,
0i64,
0x16u,
&v49);
}
}
else
{
PopReleaseRwLock(&PopTelemetryOsState);
}
return v4;
}Referenced by:
PopDiagInitialize
PopNotifyTelemetryOsState
PopPowerAggregatorActiveToScreenOffStateHandler
PopPowerAggregatorDisplayPoweringOnStateHandler