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