PopDiagTraceControlCallback
VOID __stdcall PopDiagTraceControlCallback(
_GUID *SourceId,
UINT64 ControlCode,
UINT8 Level,
UINT64 MatchAnyKeyword,
UINT64 MatchAllKeyword,
_EVENT_FILTER_DESCRIPTOR *FilterData,
PVOID CallbackContext){
unsigned int v7;
EVENT_DESCRIPTOR *v8;
INT64 *i;
PVOID *v10;
__int64 v11;
unsigned int *v12;
UINT64 *v13;
UINT64 v14;
NTSTATUS v15;
PVOID v16;
unsigned int v17;
char *v18;
char *v19;
unsigned int v20;
EVENT_DESCRIPTOR *v21;
UINT64 v22;
EVENT_DESCRIPTOR *v23;
INT64 v24;
INT64 v25;
EVENT_DESCRIPTOR *v26;
EVENT_DESCRIPTOR *v27;
EVENT_DESCRIPTOR *v28;
UINT64 v29;
UINT64 v30;
unsigned __int64 v31;
unsigned __int64 v32;
unsigned __int64 v33;
__int64 v34;
DWORD MaxCapacity;
__int64 v36;
__int64 *v37;
__int64 v38;
DWORD v39;
UINT64 v40;
__int16 v41;
__int16 v42;
__int16 v43;
PVOID P;
unsigned int BootId;
int v46;
int v47;
int v48;
int v49;
int v50;
int v51;
DWORD v52;
DWORD v53;
int v54;
int AcOnLine;
int Discharging;
BOOL v57;
__int64 v58;
__int64 v59;
unsigned __int64 v60;
__int64 v61;
unsigned __int64 v62;
UINT64 v63;
INT64 v64;
__int64 v65;
INT64 rcx0[2];
SYSTEM_BATTERY_STATE PowerState;
EVENT_DATA_DESCRIPTOR UserData;
EVENT_DATA_DESCRIPTOR v69;
EVENT_DATA_DESCRIPTOR v70;
int *v71;
__int64 v72;
EVENT_DATA_DESCRIPTOR v73;
int *v74;
__int64 v75;
EVENT_DATA_DESCRIPTOR v76;
__int64 *v77;
__int64 v78;
__int64 *v79;
__int64 v80;
struct _EVENT_DATA_DESCRIPTOR v81;
__int64 v82;
__int64 v83;
__int16 *v84;
__int64 v85;
__int64 *v86;
__int64 v87;
unsigned int *p_BootId;
__int64 v89;
__int64 *v90;
__int64 v91;
__int64 *v92;
__int64 v93;
__int64 *v94;
__int64 v95;
__int64 *v96;
__int64 v97;
__int16 *v98;
__int64 v99;
__int16 *v100;
__int64 v101;
int *v102;
__int64 v103;
int *v104;
__int64 v105;
int *v106;
__int64 v107;
int *v108;
__int64 v109;
int *v110;
__int64 v111;
INT64 *v112;
__int64 v113;
int *v114;
__int64 v115;
int *p_AcOnLine;
__int64 v117;
int *p_Discharging;
__int64 v119;
__int64 *v120;
__int64 v121;
if( (_DWORD)ControlCode == 2 )
{
v7 = 0;
LODWORD(v40) = 0;
if( CallbackContext == &dword_140C021E8 )
{
if( (MatchAnyKeyword & 0x800000000000i64) != 0 )
{
*(_OWORD *)&PowerState.AcOnLine = 0i64;
v58 = 0i64;
*(_OWORD *)rcx0 = 0i64;
if( dword_140C021E8 )
{
if( tlgKeywordOn((__int64)&dword_140C021E8, 0x800000000000i64) && byte_140C22C0C )
{
PopAcquireRwLockExclusive(&PopTelemetryOsState);
if( dword_140C22BD0 == 1 || (unsigned int)(dword_140C22BD0 - 4) <= 1 )
{
v30 = (KiQueryUnbiasedInterruptTime(1u) - qword_140C22BE8) / 0x2710;
v31 = v30 - qword_140C22BF8;
v32 = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - qword_140C22BE0) / 0x2710ui64;
qword_140C22BF8 = v30;
v33 = v32 - qword_140C22BF0;
qword_140C22BF0 = v32;
v34 = v33;
if( v31 <= v33 )
v34 = v31;
v59 = v34;
v47 = ++dword_140C22C00;
LODWORD(v40) = dword_140C22BD0;
v46 = dword_140C22BD4;
v49 = dword_140C22C04;
LODWORD(P) = dword_140C22C08;
PopReleaseRwLock((UINT64)&PopTelemetryOsState);
PopCurrentPowerState(&PowerState);
v39 = 0;
MaxCapacity = PowerState.MaxCapacity;
if( PowerState.MaxCapacity )
v39 = 100 * PowerState.RemainingCapacity / PowerState.MaxCapacity;
PopMeasureEnergyChange((INT64)rcx0, (INT64)&OsStateChangeEnergyCounter);
v58 = qword_140C22BD8;
if( (unsigned int)dword_140C021E8 > 5 && tlgKeywordOn((__int64)&dword_140C021E8, 0x800000000000i64) )
{
WORD2(v40) = 5;
v82 = (__int64)&v40 + 4;
v84 = &v41;
v86 = (__int64 *)&v60;
v83 = 2i64;
v41 = 1;
v85 = 2i64;
v60 = v33;
v87 = 8i64;
BootId = KUSER_SHARED_DATA.BootId;
p_BootId = &BootId;
v90 = &v58;
v61 = v59;
v92 = &v61;
v94 = (__int64 *)&v62;
v96 = (__int64 *)&v63;
v42 = v40;
v98 = &v42;
v43 = v46;
v100 = &v43;
v48 = v47;
v102 = &v48;
v50 = v49;
v104 = &v50;
v51 = (int)P;
v106 = &v51;
v108 = (int *)&v52;
v53 = v39;
v110 = (int *)&v53;
v64 = rcx0[1];
v112 = &v64;
v54 = rcx0[0];
v114 = &v54;
AcOnLine = PowerState.AcOnLine;
p_AcOnLine = &AcOnLine;
v89 = 4i64;
v91 = 8i64;
v93 = 8i64;
v62 = v32;
v95 = 8i64;
v63 = v30;
v97 = 8i64;
v99 = 2i64;
v101 = 2i64;
v103 = 4i64;
v105 = 4i64;
v107 = 4i64;
v52 = MaxCapacity;
v109 = 4i64;
v111 = 4i64;
v113 = 8i64;
v115 = 4i64;
Discharging = PowerState.Discharging;
v117 = 4i64;
p_Discharging = &Discharging;
v119 = 4i64;
v120 = &v65;
v65 = 0x1000000i64;
v121 = 8i64;
tlgWriteTransfer_EtwWriteTransfer(
(__int64)&dword_140C021E8,
(unsigned __int8 *)byte_140026E0D,
0i64,
0i64,
0x16u,
&v81);
}
}
else
{
PopReleaseRwLock((UINT64)&PopTelemetryOsState);
}
}
}
}
if( PopPowerPlane )
PopPlTraceLogPowerPlane((UINT16 *)PopPowerPlane, ControlCode, Level);
}
else
{
ExTraceTimerResolution();
PopDiagTraceSystemLatencyUpdate(1u, (unsigned int)PopFxSystemLatencyLimit);
PopAcquirePowerRequestPushLock(0);
for( i = (INT64 *)PopPowerRequestObjectList; i != &PopPowerRequestObjectList; i = (INT64 *)*i )
PopDiagTracePowerRequestCreate(1, (INT64)i, v8);
PopReleaseRwLock((UINT64)&PopPowerRequestLock);
*(_QWORD *)&UserData.Size = 4i64;
v57 = dword_140C23D0C == 0;
UserData.Ptr = (unsigned __int64)&v57;
EtwWrite(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_ACDC_STATE_RUNDOWN, 0i64, 1ui64, &UserData);
ExAcquireFastMutex(&PopSettingLock);
v10 = (PVOID *)PopPowerSettings;
if( PopPowerSettings != &PopPowerSettings )
{
v11 = dword_140C23D0C;
do
{
v12 = (unsigned int *)v10[v11 + 8];
if( v12 )
PopDiagTracePowerSetting(1u, (GUID *)v10 + 2, v12[1], v12 + 3);
v10 = (PVOID *)*v10;
}
while( v10 != &PopPowerSettings );
}
KeReleaseGuardedMutex(&PopSettingLock);
PopThermalTraceRundownEvents(v14, v13);
P = 0i64;
PopAcquirePolicyLock();
v15 = PopLoggingInformation(&P, &v40);
PopReleasePolicyLock();
v16 = P;
if( v15 >= 0 )
{
v17 = *(_DWORD *)P;
v18 = (char *)P + 4;
if( *(_DWORD *)P )
{
v19 = (char *)P + (unsigned int)v40;
do
{
if( v18 >= v19 )
break;
v20 = *((_DWORD *)v18 + 3);
UserData.Reserved = 0;
v20 += 16;
UserData.Size = v20;
UserData.Ptr = (unsigned __int64)v18;
EtwWrite(
PopDiagHandle,
(EVENT_DESCRIPTOR *)&POP_ETW_EVENT_SLEEP_DISABLE_REASON_RUNDOWN,
0i64,
1ui64,
&UserData);
++v7;
v18 += v20;
}
while( v7 < v17 );
v16 = P;
}
}
if( v16 )
ExFreePoolWithTag(v16, 0);
if( !_InterlockedCompareExchange(&PopDiagDeviceRundownRequests, 1, 0) )
ExQueueWorkItem(&PopDiagDeviceRundownWorkItem, DelayedWorkQueue);
PopDiagTraceFxRundown();
PopDiagTracePlatformRoleRundown();
PopRundownThermalRequests();
PopAcquirePolicyLock();
if( PopDiagHandleRegistered )
{
v22 = PopDiagHandle;
if( EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_STANDBY_CONNECTIVITY_RUNDOWN, v21) )
{
*(_QWORD *)&v70.Size = 4i64;
v70.Ptr = (unsigned __int64)&PopNetStandbyState;
v72 = 4i64;
v71 = &PopNetStandbyReason;
EtwWrite(v22, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_STANDBY_CONNECTIVITY_RUNDOWN, 0i64, 2ui64, &v70);
}
if( PopDiagHandleRegistered
&& EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_CS_COMPLIANCE_RUNDOWN, v23) )
{
v36 = 0i64;
v39 = 0;
do
{
*(_QWORD *)&v73.Size = 4i64;
v73.Ptr = (unsigned __int64)&v39;
v75 = 4i64;
v74 = &PopCsDeviceCompliance[v36];
EtwWrite(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_CS_COMPLIANCE_RUNDOWN, 0i64, 2ui64, &v73);
v36 = v39 + 1;
v39 = v36;
}
while( (unsigned int)v36 < 5 );
}
}
PopReleasePolicyLock();
PopDiagTraceDynamicTickStatusRundown();
PopDiagTraceDeepSleepConstraintRundown(v25, v24, v26);
PopAcquireRwLockExclusive(&PopPowerEventLock);
if( PopDiagHandleRegistered
&& EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_POWER_STATE_RUNDOWN, v27) )
{
v37 = qword_140D2CD90;
v38 = 48i64;
do
{
v76.Ptr = (unsigned __int64)(v37 - 4);
*(_QWORD *)&v76.Size = 4i64;
v77 = v37 - 2;
v78 = 4i64;
v79 = v37;
v80 = 8i64;
EtwWrite(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_POWER_STATE_RUNDOWN, 0i64, 3ui64, &v76);
v37 += 6;
--v38;
}
while( v38 );
}
PopReleaseRwLock((UINT64)&PopPowerEventLock);
PopAcquireRwLockExclusive(&PopSystemIdleLock);
if( PopDiagHandleRegistered )
{
v29 = PopDiagHandle;
if( EtwEventEnabled(PopDiagHandle, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_SYSTEM_IDLE_RUNDOWN, v28) )
{
*(_QWORD *)&v69.Size = 4i64;
v69.Ptr = (unsigned __int64)&PopIdleScanInterval;
EtwWrite(v29, (EVENT_DESCRIPTOR *)&POP_ETW_EVENT_SYSTEM_IDLE_RUNDOWN, 0i64, 1ui64, &v69);
}
}
PopReleaseRwLock((UINT64)&PopSystemIdleLock);
}
}
}Referenced by:
No references.