PopOrphanCoolingExtension
VOID __stdcall PopOrphanCoolingExtension(_POP_COOLING_EXTENSION *CoolingExtension){
INT64 v2;
_DEVICE_OBJECT *DeviceObject;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v5;
_LIST_ENTRY *Blink;
PopAcquireRwLockExclusive(&PopCoolingExtensionLock);
PopAcquireRwLockExclusive(&CoolingExtension->Lock);
DeviceObject = CoolingExtension->DeviceObject;
if( DeviceObject )
{
Flink = CoolingExtension->RequestListHead.Flink;
if( Flink != &CoolingExtension->RequestListHead )
{
do
{
if( BYTE2(Flink[1].Flink) )
{
BYTE2(Flink[1].Flink) = 0;
if( CoolingExtension->Interface.PassiveCooling )
{
PopThermalUpdatePassiveTimeTracking();
PopTraceThermalRequestPassiveHistogram((__int64)Flink);
PopThermalUpdateTelemetryClientCount(0);
}
if( CoolingExtension->Interface.ActiveCooling )
{
LOBYTE(v2) = BYTE1(Flink[1].Flink) == 0;
PopThermalUpdateActiveTimeTracking((INT64)&Flink[2].Blink, v2);
PopTraceThermalRequestActiveActivity((INT64)Flink);
}
PopDiagTraceThermalRequest(Flink, POP_ETW_EVENT_THERMAL_REQUEST_REMOVE);
}
Flink = Flink->Flink;
}
while( Flink != &CoolingExtension->RequestListHead );
DeviceObject = CoolingExtension->DeviceObject;
}
PopGetDope(DeviceObject)->CoolingExtension = 0i64;
v5 = CoolingExtension->Link.Flink;
if( (_POP_COOLING_EXTENSION *)CoolingExtension->Link.Flink->Blink != CoolingExtension
|| (Blink = CoolingExtension->Link.Blink, (_POP_COOLING_EXTENSION *)Blink->Flink != CoolingExtension) )
{
__fastfail(3u);
}
Blink->Flink = v5;
v5->Blink = Blink;
CoolingExtension->Link.Flink = 0i64;
CoolingExtension->DeviceObject = 0i64;
}
PopReleaseRwLock(&CoolingExtension->Lock);
PopReleaseRwLock(&PopCoolingExtensionLock);
}Referenced by:
PopCoolingExtensionPnpNotification