PopFxReleasePowerIrp

VOID __stdcall PopFxReleasePowerIrp(_POP_FX_DEVICE *FxDevice){
  unsigned __int64 v2; 
  _DEVICE_OBJECT *v3; 
  INT64 v4; 
  INT64 a5; 
  unsigned int v6; 
  signed __int32 v7; 
  signed __int32 v8; 
  char v9; 
  signed __int32 v10; 
  signed __int32 v11; 

  v2 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(*((_QWORD *)FxDevice + 6) + 88i64));
  _InterlockedAnd((volatile signed __int32 *)FxDevice + 8, 0xFFFFFFEF);
  v3 = (_DEVICE_OBJECT *)*((_QWORD *)FxDevice + 64);
  v4 = *((_QWORD *)FxDevice + 67);
  a5 = *((_QWORD *)FxDevice + 69);
  v6 = *((_DWORD *)FxDevice + 132);
  _m_prefetchw((char *)FxDevice + 32);
  v7 = *((_DWORD *)FxDevice + 8);
  do
  {
    v8 = v7;
    v7 = _InterlockedCompareExchange((volatile signed __int32 *)FxDevice + 8, v7, v7);
  }
  while( v8 != v7 );
  if( (v7 & 0x20) != 0 )
  {
    v9 = 1;
    _m_prefetchw((char *)FxDevice + 32);
    v10 = *((_DWORD *)FxDevice + 8);
    do
    {
      v11 = v10;
      v10 = _InterlockedCompareExchange((volatile signed __int32 *)FxDevice + 8, v10, v10);
    }
    while( v11 != v10 );
    if( (v10 & 0x100) != 0 )
    {
      v3 = (_DEVICE_OBJECT *)*((_QWORD *)FxDevice + 65);
      v4 = *((_QWORD *)FxDevice + 68);
      a5 = *((_QWORD *)FxDevice + 70);
      v6 = *((_DWORD *)FxDevice + 133);
    }
  }
  else
  {
    v9 = 0;
    KeSetEvent((PRKEVENT)((char *)FxDevice + 568), 0, 0);
    if( _InterlockedExchangeAdd((volatile signed __int32 *)FxDevice + 61, 0xFFFFFFFF) == 1 )
      KeSetEvent((PRKEVENT)((char *)FxDevice + 248), 0, 0);
  }
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(*((_QWORD *)FxDevice + 6) + 88i64));
  __writecr8(v2);
  if( v9 )
    PopRequestPowerIrp(v3, 2, v6, v4, a5, 1, 0i64);
}

Referenced by:

No references.