PopFxNotifyPreDIrpCompletion

INT32 __fastcall PopFxNotifyPreDIrpCompletion(PVOID BugCheckParameter3, INT64 a2, INT64 a3){
  int v3; 
  INT32 result; 
  INT32 v6; 
  unsigned __int8 v7; 
  unsigned __int64 v8; 
  unsigned int v9; 
  v3 = a3;
  result = _InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter3 + 206, 0, 0);
  if( (result & 0x20) != 0 )
  {
    _m_prefetchw((char *)BugCheckParameter3 + 32);
    result = *((_DWORD *)BugCheckParameter3 + 8);
    do
    {
      v6 = result;
      result = _InterlockedCompareExchange((volatile signed __int32 *)BugCheckParameter3 + 8, result, result);
    }
    while( v6 != result );
    if( (result & 0x2000) != 0 )
    {
      _m_prefetchw((char *)BugCheckParameter3 + 32);
      _InterlockedOr((volatile signed __int32 *)BugCheckParameter3 + 8, 0);
      KeAcquireSpinLockRaiseToDpc((UINT64 *)BugCheckParameter3 + 144, a2);
      v8 = v7;
      v9 = *((_DWORD *)BugCheckParameter3 + 295) & 0xFFFFFFFC | 2;
      *((_DWORD *)BugCheckParameter3 + 294) = v3;
      *((_DWORD *)BugCheckParameter3 + 295) = v9;
      KxReleaseSpinLock((UINT64 *)BugCheckParameter3 + 144);
      __writecr8(v8);
      return PopFxDerefAndCompleteDirectedPowerTransition(BugCheckParameter3);
    }
  }
  return result;
}

Referenced by:

PopRequestCompletion