PopPropogateCoolingChange

void __fastcall PopPropogateCoolingChange(__int64 a1){
  char v2; 
  unsigned __int8 v3; 
  __int64 *i; 
  unsigned __int8 v5; 
  __int64 v6; 
  EVENT_DESCRIPTOR *v7; 
  __int64 v8; 
  struct _KEVENT *v9; 
  struct _KEVENT *v10; 
  __int64 v11; 
  EVENT_DESCRIPTOR *v12; 
  if( *(_BYTE *)(a1 + 67) )
  {
    *(_BYTE *)(a1 + 67) = 0;
    return;
  }
  do
  {
    while( 1 )
    {
      v2 = 0;
      v3 = 100;
      if( *(_BYTE *)(a1 + 64) )
      {
        for( i = *(__int64 **)(a1 + 16); i != (__int64 *)(a1 + 16); i = (__int64 *)*i )
        {
          if( *((_BYTE *)i + 18) )
          {
            v5 = *((_BYTE *)i + 16);
            if( v5 >= v3 )
              v5 = v3;
            v3 = v5;
            if( *((_BYTE *)i + 17) )
              v2 = 1;
          }
        }
      }
      if( v3 == *(_BYTE *)(a1 + 66) )
        break;
      *(_BYTE *)(a1 + 66) = v3;
      *(_BYTE *)(a1 + 67) = 1;
      PopReleaseRwLock(a1 + 32);
      PopDiagTraceCoolingExtensionPassiveUpdate(a1, v11, v12);
      (*(void(__fastcall **)(_QWORD, _QWORD))(a1 + 136))(*(_QWORD *)(a1 + 96), v3);
      PopAcquireRwLockExclusive((_POP_RW_LOCK *)(a1 + 32));
      if( *(_BYTE *)(a1 + 67) )
      {
        *(_BYTE *)(a1 + 67) = 0;
        break;
      }
    }
    if( v2 == *(_BYTE *)(a1 + 65) )
      goto LABEL_15;
    *(_BYTE *)(a1 + 65) = v2;
    *(_BYTE *)(a1 + 67) = 1;
    PopReleaseRwLock(a1 + 32);
    PopDiagTraceCoolingExtensionActiveUpdate(a1, v6, v7);
    LOBYTE(v8) = v2;
    (*(void(__fastcall **)(_QWORD, __int64))(a1 + 128))(*(_QWORD *)(a1 + 96), v8);
    PopAcquireRwLockExclusive((_POP_RW_LOCK *)(a1 + 32));
  }
  while( !*(_BYTE *)(a1 + 67) );
  *(_BYTE *)(a1 + 67) = 0;
LABEL_15:
  v9 = *(struct _KEVENT **)(a1 + 80);
  if( v9 )
    KeSetEvent(v9, 0);
  v10 = *(struct _KEVENT **)(a1 + 72);
  if( v10 )
    KeSetEvent(v10, 0);
}

Referenced by:

PoSetThermalActiveCooling
PoSetThermalPassiveCooling
PopCoolingExtensionPnpNotification
PopDeactiveThermalRequest
PopDisableCoolingExtension