PopCheckThermalPolicy
VOID __stdcall PopCheckThermalPolicy(
_POP_THERMAL_ZONE *ThermalZone,
UINT64 CurrentTime,
UINT8 *PassiveEngaged,
INT64 *ThrottleDelta){
_DEVICE_OBJECT *DeviceAttachmentBaseRefWithTag;
unsigned int v9;
char v10;
unsigned int v11;
bool v12;
unsigned int v13;
__int64 i;
UINT64 v15;
unsigned int v16;
unsigned int v17;
UINT8 v18;
char v19;
int v20;
int v21;
int v22;
int v23;
int v24;
int v25;
unsigned int v26;
bool v27;
DeviceAttachmentBaseRefWithTag = IoGetDeviceAttachmentBaseRefWithTag(
*((_DEVICE_OBJECT **)ThermalZone + 6),
0x6D546F50ui64);
*((_DWORD *)ThermalZone + 58) = 1000000 * *((_DWORD *)ThermalZone + 50);
v9 = *((_DWORD *)ThermalZone + 35);
if( v9 && *((_DWORD *)ThermalZone + 32) >= v9 )
{
PopPrintEx(
0i64,
(INT8 *)"Thermal Zone %S(%p): Above critical temperature(_TMP %d, _CRT %d). Shutdown initiated\n");
v10 = 1;
}
else
{
v10 = 0;
}
*((_BYTE *)ThermalZone + 210) = v10;
v11 = *((_DWORD *)ThermalZone + 47);
v12 = v11 && *((_DWORD *)ThermalZone + 32) >= v11;
*((_BYTE *)ThermalZone + 209) = v12;
v13 = *((_DWORD *)ThermalZone + 34);
if( v13 )
{
v19 = *((_BYTE *)ThermalZone + 211);
if( *((_DWORD *)ThermalZone + 32) < v13 )
{
if( v19 )
*((_BYTE *)ThermalZone + 211) = 0;
}
else if( !v19 )
{
*((_BYTE *)ThermalZone + 211) = 1;
}
}
for( i = 0i64; (unsigned int)i < *((unsigned __int8 *)ThermalZone + 144); i = (unsigned int)(i + 1) )
{
if( *((_DWORD *)ThermalZone + 32) >= *((_DWORD *)ThermalZone + i + 37) )
break;
}
v15 = *((unsigned int *)ThermalZone + 26);
*((_DWORD *)ThermalZone + 55) = i;
if( CurrentTime - *((_QWORD *)ThermalZone + 12) < v15 )
{
*(_DWORD *)ThrottleDelta = 0;
v18 = *((_BYTE *)ThermalZone + 65) & 1;
}
else
{
v16 = *((_DWORD *)ThermalZone + 32);
if( *((_DWORD *)ThermalZone + 20) != 100 || (v17 = *((_DWORD *)ThermalZone + 33)) != 0 && v16 >= v17 )
{
if( (*((_BYTE *)ThermalZone + 65) & 1) != 0 )
{
v20 = *((_DWORD *)ThermalZone + 27);
}
else
{
*((_DWORD *)ThermalZone + 26) = 10000 * *((_DWORD *)ThermalZone + 31);
v20 = *((_DWORD *)ThermalZone + 33);
}
v21 = *((_DWORD *)ThermalZone + 19);
v22 = *((_DWORD *)ThermalZone + 30) * (v16 - *((_DWORD *)ThermalZone + 33))
+ (v16 - v20) * *((_DWORD *)ThermalZone + 29);
if( v16 == v20 || (((v16 - v20) ^ v22) & 0x80000000) == 0 )
v21 -= v22;
if( v21 > 1000 )
v21 = 1000;
v23 = *((_DWORD *)ThermalZone + 48);
v24 = 0;
if( v21 >= 0 )
v24 = v21;
v25 = 10 * v23;
if( v24 >= 10 * v23 )
v25 = v24;
*((_DWORD *)ThermalZone + 19) = v25;
v26 = (v25 + 5) / 10;
v27 = v26 < *((_DWORD *)ThermalZone + 49);
*((_DWORD *)ThermalZone + 54) = v26;
*((_BYTE *)ThermalZone + 224) = v27;
v18 = 1;
*(_DWORD *)ThrottleDelta = 0;
*((_DWORD *)ThermalZone + 27) = v16;
*((_QWORD *)ThermalZone + 12) = CurrentTime;
*((_DWORD *)ThermalZone + 53) = 1;
}
else
{
*(_DWORD *)ThrottleDelta = 0;
*((_DWORD *)ThermalZone + 53) = 0;
v18 = 0;
}
}
*PassiveEngaged = v18;
if( DeviceAttachmentBaseRefWithTag )
ObfDereferenceObjectWithTag(DeviceAttachmentBaseRefWithTag, 0x6D546F50ui64);
}Referenced by:
PopThermalWorker