PopFxHandleDirectedPowerTransition
NTSTATUS __stdcall PopFxHandleDirectedPowerTransition(PVOID BugCheckParameter3){
signed __int32 v2;
signed __int32 v3;
int v4;
__int64 v5;
__int64 v6;
NTSTATUS result;
_m_prefetchw((char *)BugCheckParameter3 + 32);
v2 = *((_DWORD *)BugCheckParameter3 + 8);
do
{
v3 = v2;
v2 = _InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter3 + 8, v2, v2);
}
while( v3 != v2 );
v4 = v2 & 0x1000;
PopDiagTraceFxDeviceDirectedTransition(*((_QWORD *)BugCheckParameter3 + 6), v4 != 0);
v5 = (unsigned int)PopFxDirectedPowerDownTimeoutMs;
if( !v4 )
v5 = (unsigned int)PopFxDirectedPowerUpTimeoutMs;
PopFxEnableWorkOrderWatchdog((char *)BugCheckParameter3 + 920, v5);
v6 = *((_QWORD *)BugCheckParameter3 + 24);
if( v4 )
(*((void(__fastcall **)(__int64, _QWORD))BugCheckParameter3 + 23))(v6, 0i64);
else(*((void(__fastcall **)(__int64, _QWORD))BugCheckParameter3 + 22))(v6, 0i64);
if( _InterlockedExchangeAdd((volatile signed __int32 *)BugCheckParameter3 + 290, 0xFFFFFFFF) == 1 )
return PopFxCompleteDirectedPowerTransition(BugCheckParameter3);
PopFxAddLogEntry(*((_QWORD *)BugCheckParameter3 + 6), 0, 24, 0i64);
return result;
}Referenced by:
PopFxDirectedPowerTransitionWorker