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