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