PopFxClearDeviceConstraints

NTSTATUS __stdcall PopFxClearDeviceConstraints(INT64 a1){
  __int64 v2; 
  int v3; 
  __int64 v4; 
  _DEVICE_OBJECT *v5; 
  signed __int32 v6; 
  unsigned __int64 v7; 
  unsigned int i; 
  __int64 v9; 
  unsigned __int64 v10; 
  UINT64 MatchingChangeStamp; 
  UINT64 CheckStamp; 

  if( (unsigned int)PpmGetDeepSleepPlatformStateIndex() == -1 )
    return -1073741823;
  if( !a1 )
    return -1073741811;
  v4 = *(_QWORD *)(v2 + 64);
  if( v4 )
  {
    if( (*(_DWORD *)(v4 + 24) & 0x8000000) == 0 )
      return -1073741823;
  }
  PopFxAddRefDevice((POP_FX_DEVICE *)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 )
    {
      v6 = _InterlockedCompareExchange((_DWORD *)&stru_140C23628 + 1058, 0, 0);
      v7 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 600));
      *(_DWORD *)(a1 + 616) = v6;
      memset((VOID *)(a1 + 632), 0i64, 0xC0u);
      *(_BYTE *)(a1 + 608) = 0;
      *(_QWORD *)(a1 + 624) = 0i64;
      *(_DWORD *)(a1 + 612) = 5;
      _InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFFEF);
      KxReleaseSpinLock((UINT64 *)(a1 + 600));
      __writecr8(v7);
      for( i = 0; i < *(_DWORD *)(a1 + 828); ++i )
      {
        v9 = *(_QWORD *)(*(_QWORD *)(a1 + 832) + 8i64 * i) + 200i64;
        v10 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)v9);
        *(_DWORD *)(v9 + 16) = v6;
        memset((VOID *)(v9 + 32), 0i64, 0xC0u);
        *(_DWORD *)(v9 + 12) = -1;
        *(_BYTE *)(v9 + 8) = 0;
        *(_QWORD *)(v9 + 24) = 0i64;
        _InterlockedAnd((volatile signed __int32 *)(a1 + 824), 0xFFFFFEFF);
        KxReleaseSpinLock((UINT64 *)v9);
        __writecr8(v10);
      }
    }
    PoFxIdleDevice(v5);
  }
  else
  {
    v3 = -1073741823;
  }
  if( _InterlockedExchangeAdd((volatile signed __int32 *)(a1 + 244), 0xFFFFFFFF) == 1 )
    KeSetEvent((PRKEVENT)(a1 + 248), 0, 0);
  if( !v3 )
  {
    LODWORD(CheckStamp) = 0;
    LODWORD(MatchingChangeStamp) = 0;
    ZwUpdateWnfStateData(
      &WNF_PO_DRIPS_DEVICE_CONSTRAINTS_UPDATED,
      0i64,
      0i64,
      0i64,
      0i64,
      MatchingChangeStamp,
      CheckStamp);
  }
  return v3;
}

Referenced by:

PopPowerInformationInternal