PopFxIssueDirectedPowerTransition
NTSTATUS __stdcall PopFxIssueDirectedPowerTransition(PVOID BugCheckParameter2){
UINT64 v1;
__int64 v2;
__int64 v3;
char v4;
UINT64 *v6;
unsigned __int8 v7;
unsigned __int64 v8;
__int64 v9;
NTSTATUS result;
v3 = v2;
v4 = v1;
if( (_InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter2 + 206, 0, 0) & 0x20) == 0 )
PopFxBugCheck(0x910ui64, 1ui64, (UINT64)BugCheckParameter2, 0i64);
v6 = (UINT64 *)((char *)BugCheckParameter2 + 1152);
KeAcquireSpinLockRaiseToDpc((UINT64 *)BugCheckParameter2 + 144, v1);
v8 = v7;
if( *((_DWORD *)BugCheckParameter2 + 290) || (*((_DWORD *)BugCheckParameter2 + 8) & 0x2000) != 0 )
PopFxBugCheck(0x910ui64, 3ui64, (UINT64)BugCheckParameter2, 0i64);
if( ((*((_DWORD *)BugCheckParameter2 + 8) & 0x1000) != 0) == v4 )
PopFxBugCheck(0x910ui64, (v4 != 0) + 4i64, (UINT64)BugCheckParameter2, 0i64);
*((_DWORD *)BugCheckParameter2 + 290) = 2;
_InterlockedOr((volatile signed __int32 *)BugCheckParameter2 + 8, 0x2000u);
if( v4 )
_InterlockedOr((volatile signed __int32 *)BugCheckParameter2 + 8, 0x1000u);
else
_InterlockedAnd((volatile signed __int32 *)BugCheckParameter2 + 8, 0xFFFFEFFF);
PopFxAddRefDevice((ULONG_PTR)BugCheckParameter2);
*((_DWORD *)BugCheckParameter2 + 295) &= 0xFFFFFFFC;
*((_QWORD *)BugCheckParameter2 + 146) = v3;
*((_DWORD *)BugCheckParameter2 + 294) = -1073741436;
PopFxQueueWorkOrder(v9, (ULONG_PTR)BugCheckParameter2 + 920, (ULONG_PTR)BugCheckParameter2);
KxReleaseSpinLock(v6);
result = KiIrqlFlags;
__writecr8(v8);
return result;
}Referenced by:
PopIssueDirectedPowerTransition