PopFxClearDeviceConstraints

INT64 __fastcall PopFxClearDeviceConstraints(INT64 a1){
  ULONG_PTR v2; 
  int v3; 
  __int64 v4; 
  DEVICE_OBJECT *v5; 
  UINT64 v6; 
  signed __int32 v7; 
  unsigned __int8 v8; 
  unsigned __int64 v9; 
  UINT64 v10; 
  unsigned int i; 
  __int64 v12; 
  unsigned __int8 v13; 
  unsigned __int64 v14; 
  if( (unsigned int)PpmGetDeepSleepPlatformStateIndex() == -1 )
    return(unsigned int)-1073741823;
  if( !a1 )
    return(unsigned int)-1073741811;
  v4 = *(_QWORD *)(v2 + 64);
  if( v4 && (*(_DWORD *)(v4 + 24) & 0x8000000) == 0 )
  {
    return(unsigned int)-1073741823;
  }
  else
  {
    PopFxAddRefDevice(v2);
    if( (_InterlockedCompareExchange((volatile signed __int32 *)(a1 + 824), 0, 0) & 0x10) != 0 && *(_QWORD *)(a1 + 56) )
    {
      v5 = *(DEVICE_OBJECT **)(*(_QWORD *)(a1 + 48) + 32i64);
      PopFxActivateDevice(v5, 0);
      v3 = PopPepClearDripsDeviceVetoMask(*(INT64 **)(a1 + 56));
      if( v3 >= 0 )
      {
        v7 = _InterlockedCompareExchange(&PopFxDeviceAccountingLevel, 0, 0);
        KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 600), v6);
        v9 = v8;
        *(_DWORD *)(a1 + 616) = v7;
        memset(a1 + 632, 0i64);
        *(_BYTE *)(a1 + 608) = 0;
        *(_QWORD *)(a1 + 624) = 0i64;
        *(_DWORD *)(a1 + 612) = 5;
        _InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFFEF);
        KxReleaseSpinLock((UINT64 *)(a1 + 600));
        __writecr8(v9);
        for( i = 0; i < *(_DWORD *)(a1 + 828); ++i )
        {
          v12 = *(_QWORD *)(*(_QWORD *)(a1 + 832) + 8i64 * i) + 200i64;
          KeAcquireSpinLockRaiseToDpc((UINT64 *)v12, v10);
          v14 = v13;
          *(_DWORD *)(v12 + 16) = v7;
          memset(v12 + 32, 0i64);
          *(_DWORD *)(v12 + 12) = -1;
          *(_BYTE *)(v12 + 8) = 0;
          *(_QWORD *)(v12 + 24) = 0i64;
          _InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFEFF);
          KxReleaseSpinLock((UINT64 *)v12);
          __writecr8(v14);
        }
      }
      PoFxIdleDevice(v5);
    }
    else
    {
      v3 = -1073741823;
    }
    if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 244), 0xFFFFFFFF) == 1 )
      KeSetEvent((PRKEVENT)(a1 + 248), 0);
    if( !v3 )
      ZwUpdateWnfStateData();
  }
  return(unsigned int)v3;
}

Referenced by:

PopPowerInformationInternal