PopThermalWorker
VOID __stdcall PopThermalWorker(PVOID Parameter){
int v1;
char *v2;
signed __int64 v4;
ULONG_PTR v5;
DEVICE_OBJECT *v6;
EVENT_DESCRIPTOR *v7;
int v8;
UINT8 v9;
int v10;
char v11;
char v12;
char *v13;
char v14;
char v15;
char v16;
signed __int64 v17;
_EXT_SET_PARAMETERS_V0 *v18;
UINT64 v19;
__int64 v20;
char v21;
char v22;
INT64 v23;
unsigned int v24;
unsigned int v25;
char v26;
char v27;
char v28;
char v29;
UINT16 v30;
char v31;
EVENT_DESCRIPTOR *v32;
unsigned int v33;
char v34;
int v35;
UINT64 v36;
DEVICE_OBJECT *v37;
int v38;
EVENT_DESCRIPTOR *v39;
char v40;
char v41;
char v42;
__int64 v43;
signed __int64 v44;
__int64 v45;
signed __int64 v46;
ULONG_PTR BugCheckParameter4;
UINT64 OutputSize;
char v49;
UINT8 PassiveEngaged;
char v51;
INT ThrottleDelta;
DEVICE_OBJECT *DeviceObject;
__int64 v54;
ULONG_PTR v55;
__int128 v56;
v1 = 0;
v2 = (char *)Parameter + 432;
v49 = 0;
v51 = 0;
v56 = 0i64;
v4 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
v5 = *((_QWORD *)Parameter + 7);
v6 = (DEVICE_OBJECT *)*((_QWORD *)Parameter + 6);
v55 = v5;
DeviceObject = v6;
v54 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
PassiveEngaged = 0;
ThrottleDelta = 0;
PopAcquireRwLockExclusive((_POP_RW_LOCK *)Parameter + 27);
if( *((_BYTE *)Parameter + 66) )
{
*((_BYTE *)Parameter + 64) = 0;
goto LABEL_69;
}
v8 = *(_DWORD *)(v5 + 48);
v9 = 1;
v10 = 4;
if( v8 < 0 )
{
if( v8 == -1073741667 || v8 == -1073741536 )
goto LABEL_7;
if( *((_BYTE *)Parameter + 64) == 7 )
{
*((_BYTE *)Parameter + 64) = 1;
goto LABEL_7;
}
*((_BYTE *)Parameter + 64) = 5;
LABEL_69:
KeSetEvent((PRKEVENT)((char *)Parameter + 448), 0);
goto LABEL_26;
}
if( *((_BYTE *)Parameter + 64) == 1 )
{
v21 = *((_BYTE *)Parameter + 65);
*((_QWORD *)Parameter + 30) = v4;
if( (v21 & 2) == 0 )
{
*((_BYTE *)Parameter + 65) = v21 | 2;
PopDiagTraceThermalZoneEnumeration(
(_THERMAL_INFORMATION_EX *)((char *)Parameter + 112),
(_UNICODE_STRING *)Parameter + 65,
v6);
}
PopCheckThermalPolicy((_POP_THERMAL_ZONE *)Parameter, v4, &PassiveEngaged, &ThrottleDelta);
KeSetEvent((PRKEVENT)((char *)Parameter + 472), 0);
v22 = PassiveEngaged;
goto LABEL_33;
}
if( *((_BYTE *)Parameter + 64) != 2 )
{
switch( *((_BYTE *)Parameter + 64) )
{
case 3:
*((_BYTE *)Parameter + 69) = *((_BYTE *)Parameter + 70);
LABEL_7:
v11 = 0;
goto LABEL_8;
case 4:
*((_DWORD *)Parameter + 20) = *((_DWORD *)Parameter + 21);
goto LABEL_7;
case 6:
*((_BYTE *)Parameter + 505) = *((_BYTE *)Parameter + 144);
*((_BYTE *)Parameter + 64) = 10;
goto LABEL_7;
case 7:
*((_BYTE *)Parameter + 228) = 1;
*((_BYTE *)Parameter + 64) = 8;
break;
case 8:
break;
default:
if( *((_BYTE *)Parameter + 64) != 10 )
{
PopInternalAddToDumpFile((PVOID)v5, 0xD0ui64, v6);
KeBugCheckEx(0xA0u, 0x500ui64, 5ui64, v5, (ULONG_PTR)v6);
}
*((_BYTE *)Parameter + 64) = 7;
goto LABEL_7;
}
v33 = *((_DWORD *)Parameter + 54);
v22 = v33 < 0x64;
v34 = *((_BYTE *)Parameter + 65);
ThrottleDelta = 10 * (*((_DWORD *)Parameter + 20) - v33);
if( (v34 & 2) == 0 )
{
*((_BYTE *)Parameter + 65) = v34 | 2;
PopDiagTraceThermalZoneEnumeration(
(_THERMAL_INFORMATION_EX *)((char *)Parameter + 112),
(_UNICODE_STRING *)Parameter + 65,
v6);
}
LABEL_33:
v23 = *((unsigned __int8 *)Parameter + 69);
v24 = *((_DWORD *)Parameter + 55);
v25 = *((unsigned __int8 *)Parameter + 144);
if( v24 == (_DWORD)v23 )
{
v28 = *((_BYTE *)Parameter + 65);
v31 = v28 & 4;
if( v24 >= v25 )
{
if( !v31 )
goto LABEL_40;
}
else if( v31 )
{
goto LABEL_40;
}
}
*((_BYTE *)Parameter + 70) = *((_BYTE *)Parameter + 220);
PopThermalUpdateActiveTimeTracking((INT64)Parameter + 504, v23);
v26 = *((_BYTE *)Parameter + 65);
v49 = 1;
if( v24 >= v25 )
goto LABEL_35;
if( (v26 & 4) != 0 )
{
if( v24 >= v25 )
{
LABEL_35:
if( (v26 & 4) != 0 )
{
PopDiagTraceActiveCooling((__int64)Parameter + 112, (__int64)DeviceObject, 0i64, 0);
PopDiagTraceActiveCooling((__int64)Parameter + 112, (__int64)DeviceObject, 0i64, 1u);
}
}
}
else
{
LOBYTE(v7) = 1;
PopDiagTraceActiveCooling((__int64)Parameter + 112, (__int64)DeviceObject, v7, 0);
LOBYTE(v32) = 1;
PopDiagTraceActiveCooling((__int64)Parameter + 112, (__int64)DeviceObject, v32, 1u);
*((_QWORD *)Parameter + 31) = v4;
}
v27 = *((_BYTE *)Parameter + 65);
if( v24 < v25 )
v28 = v27 | 4;
else
v28 = v27 & 0xFB;
*((_BYTE *)Parameter + 65) = v28;
LABEL_40:
if( *((_DWORD *)Parameter + 54) == *((_DWORD *)Parameter + 20) )
{
v6 = DeviceObject;
v29 = v28 & 1;
if( v22 )
{
if( v29 )
goto LABEL_43;
}
else if( !v29 )
{
LABEL_43:
PopCheckAndHandleThermalConditions((_POP_THERMAL_ZONE *)Parameter);
v11 = v49;
v2 = (char *)Parameter + 432;
v4 = v54;
v5 = v55;
goto LABEL_8;
}
}
else
{
PopThermalUpdatePassiveTimeTracking(
(_POP_THERMAL_TELEMETRY_TRACKER *)((char *)Parameter + 504),
*((_BYTE *)Parameter + 80));
v35 = *((_DWORD *)Parameter + 54);
v6 = DeviceObject;
v36 = *((unsigned int *)Parameter + 32);
v37 = DeviceObject;
v51 = 1;
*((_DWORD *)Parameter + 21) = v35;
PopDiagTraceThermalZoneThrottlePerfTrack(v36, (unsigned int)(100 - v35), v37);
}
v38 = ThrottleDelta;
LOBYTE(v7) = v22;
PopDiagTracePassiveCooling((__int64)Parameter + 112, (__int64)v6, v7, ThrottleDelta, 0);
v40 = *((_BYTE *)Parameter + 65);
if( v22 )
{
if( (v40 & 1) == 0 )
{
LOBYTE(v39) = 1;
PopDiagTracePassiveCooling((__int64)Parameter + 112, (__int64)v6, v39, v38, 1u);
*((_QWORD *)Parameter + 32) = v54;
}
}
else if( (v40 & 1) != 0 )
{
PopDiagTracePassiveCooling((__int64)Parameter + 112, (__int64)v6, 0i64, v38, 1u);
PopDiagTraceThermalZoneThrottleDurationPerfTrack((v54 - *((_QWORD *)Parameter + 32)) / 0x2710ui64, v6);
}
v41 = *((_BYTE *)Parameter + 65);
if( v22 )
v42 = v41 | 1;
else
v42 = v41 & 0xFE;
*((_BYTE *)Parameter + 65) = v42;
goto LABEL_43;
}
v30 = *((unsigned __int8 *)Parameter + 68);
*((_BYTE *)Parameter + 67) = v30;
PopDiagTraceThermalCoolingMode(v6, v30);
if( WmiThermalPolicyEventEnabled )
PopFireThermalWmiEvent(*((_BYTE *)Parameter + 67));
v11 = 1;
LABEL_8:
v12 = v51;
v13 = (char *)Parameter + 70;
v14 = v11;
if( *((_BYTE *)Parameter + 69) != *((_BYTE *)Parameter + 70) )
v14 = 1;
v15 = *((_BYTE *)Parameter + 64);
if( *((_DWORD *)Parameter + 20) != *((_DWORD *)Parameter + 21) )
v12 = 1;
switch( v15 )
{
case 6:
goto LABEL_23;
case 10:
v10 = 16;
v13 = (char *)Parameter + 1040;
v9 = 0;
v19 = 2703512i64;
v1 = 16;
goto LABEL_25;
case 7:
LABEL_60:
v13 = (char *)Parameter + 204;
v19 = 2703508i64;
*((_DWORD *)Parameter + 51) = 1;
v9 = 0;
v1 = 24;
goto LABEL_24;
}
if( v14 )
{
*((_BYTE *)Parameter + 64) = 3;
v19 = 2719880i64;
goto LABEL_25;
}
if( v12 )
{
*((_BYTE *)Parameter + 64) = 4;
v13 = (char *)Parameter + 84;
v19 = 2719884i64;
goto LABEL_25;
}
v16 = PopCoolingMode;
if( *((unsigned __int8 *)Parameter + 67) != PopCoolingMode )
{
v13 = (char *)Parameter + 68;
*((_BYTE *)Parameter + 64) = 2;
*((_BYTE *)Parameter + 68) = v16;
v19 = 2719876i64;
v10 = 1;
goto LABEL_25;
}
if( *((_BYTE *)Parameter + 228) )
{
*((_BYTE *)Parameter + 64) = 8;
*((_BYTE *)Parameter + 208) = 1;
goto LABEL_60;
}
v17 = 0i64;
*((_BYTE *)Parameter + 64) = 1;
if( (*((_BYTE *)Parameter + 65) & 1) != 0 )
{
v43 = *((unsigned int *)Parameter + 26);
if( (_DWORD)v43 )
{
v44 = *((_QWORD *)Parameter + 12) + v43;
if( v44 <= v4 )
*((_DWORD *)Parameter + 28) = 0;
else
v17 = v44;
}
}
v18 = 0i64;
if( PopThermalPollingMode )
{
v45 = *((unsigned int *)Parameter + 58);
if( (_DWORD)v45 )
{
v46 = *((_QWORD *)Parameter + 30) + v45;
if( v46 <= v4 )
{
*((_DWORD *)Parameter + 28) = 0;
v17 = 0i64;
}
else if( !v17 || v17 >= v46 )
{
v17 = v46;
}
}
if( !PopThermalPollingWakesAllowed )
{
*((_QWORD *)&v56 + 1) = -1i64;
v18 = (_EXT_SET_PARAMETERS_V0 *)&v56;
}
}
if( v17 )
KeSetTimer2((_KTIMER2 *)((char *)Parameter + 296), v4 - v17, 0i64, v18);
LABEL_23:
v1 = 92;
v13 = (char *)Parameter + 112;
v19 = 2703488i64;
LABEL_24:
v10 = v1;
LABEL_25:
LODWORD(OutputSize) = v1;
LODWORD(BugCheckParameter4) = v10;
PopPrepareIoctl(*((IRP **)Parameter + 7), v19, v9, v13, BugCheckParameter4, OutputSize);
v20 = *(_QWORD *)(v5 + 184);
*(_QWORD *)(v20 - 16) = PopThermalIrpComplete;
*(_QWORD *)(v20 - 8) = Parameter;
*(_BYTE *)(v20 - 69) = -32;
IofCallDriver(v6, (PIRP)v5);
LABEL_26:
PopReleaseRwLock((UINT64)v2);
}Referenced by:
No references.