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