PopThermalZoneRemove

void __fastcall __noreturn PopThermalZoneRemove(_POP_POLICY_DEVICE *PolicyDevice){
  void *v1; 
  void *v2; 
  void *v3; 
  INT64 v5; 
  void *Notification; 
  BYTE2(PolicyDevice[1].Link.Flink) = 1;
  IoCancelIrp((KDPC *)PolicyDevice->Irp, v1, v2, v3);
  KeWaitForSingleObject(&PolicyDevice[7], Executive, 0, 0, 0i64);
  if( BYTE1(PolicyDevice[2].DeviceType) )
  {
    PopThermalUpdatePassiveTimeTracking(
      (_POP_THERMAL_TELEMETRY_TRACKER *)&PolicyDevice[7].Irp,
      PolicyDevice[1].DeviceType);
    PopTraceThermalZonePassiveHistogram((INT64)PolicyDevice);
  }
  if( BYTE1(PolicyDevice[7].Irp) )
  {
    LOBYTE(v5) = BYTE5(PolicyDevice[1].Link.Flink);
    PopThermalUpdateActiveTimeTracking((INT64)&PolicyDevice[7].Irp, v5);
    PopTraceThermalZoneActiveActivity((INT64)PolicyDevice);
  }
  if( LOBYTE(PolicyDevice[1].Link.Blink) )
  {
    PopDiagTraceThermalStandbyState(PolicyDevice->Device, 0i64);
    PopAcquireRwLockExclusive(&PopSystemThermalInfo);
    --dword_140C22C54;
    PopTraceZoneCr3Mitigated((unsigned int)GenerationId, (_POP_THERMAL_ZONE *)PolicyDevice);
    if( !dword_140C22C54 )
    {
      PopTraceCr3Mitigated((unsigned int)GenerationId);
      if( HIBYTE(word_140C22C50) == 1 )
      {
        PopThermalStandbyNotify(0);
        HIBYTE(word_140C22C50) = 0;
      }
    }
    PopReleaseRwLock((UINT64)&PopSystemThermalInfo);
  }
  if( BYTE1(PolicyDevice[1].Link.Blink) )
    PopUpdateOverThrottledCount((_POP_THERMAL_ZONE *)PolicyDevice, 0);
  KeDisableTimer2((__int64)&PolicyDevice[4].Name.Buffer, 1, 1, 0i64);
  BYTE1(PolicyDevice[1].Link.Flink) |= 0x80u;
  if( !--PopThermalZoneCount )
  {
    PopAcquirePolicyLock();
    if( *(&PopCapabilities + 13) )
    {
      *(&PopCapabilities + 13) = 0;
      PopResetCurrentPolicies();
    }
    PopReleasePolicyLock();
  }
  PopThermalUpdateTelemetryClientCount(0);
  Notification = PolicyDevice[16].Notification;
  if( Notification )
    ExFreePoolWithTag(Notification, 0);
}

Referenced by:

No references.