PopFxSetDeviceAccountingCsPlatformState

void __fastcall PopFxSetDeviceAccountingCsPlatformState(char a1){
  char v1; 
  int v2; 
  int v3; 
  _ETHREAD *CurrentThread; 
  ULONG_PTR i; 
  __int64 v6; 
  DEVICE_OBJECT *v7; 
  char MinimumDevicePowerState; 
  UINT64 v9; 
  unsigned __int8 v10; 
  unsigned __int64 v11; 
  char v12; 
  unsigned int v13; 
  __int64 v14; 
  CHAR MinimumComponentIdleState; 
  UINT64 v16; 
  unsigned __int8 v17; 
  unsigned __int64 v18; 
  UINT64 a4; 
  DEVICE_OBJECT *Pdo; 
  v1 = a1;
  LODWORD(a4) = 0;
  v2 = _InterlockedCompareExchange(&PopFxDeviceAccountingLevel, 0, 0);
  v3 = v2;
  if( !v2 || v2 < 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
    for( i = PopFxDeviceList; (ULONG_PTR *)i != &PopFxDeviceList; i = *(_QWORD *)i )
    {
      v6 = *(_QWORD *)(i + 48);
      if( v6 )
      {
        v7 = *(DEVICE_OBJECT **)(v6 + 32);
        Pdo = v7;
        PopFxActivateDevice(v7, 0);
        MinimumDevicePowerState = PopPepGetMinimumDevicePowerState(*(_QWORD *)(i + 56), v1, 1, &a4, 0i64);
        KeAcquireSpinLockRaiseToDpc((UINT64 *)(i + 600), v9);
        v11 = v10;
        *(_DWORD *)(i + 616) = v3;
        memset(i + 632, 0i64);
        if( MinimumDevicePowerState && (int)a4 > 1 )
        {
          *(_DWORD *)(i + 612) = a4;
          *(_BYTE *)(i + 608) = 1;
          *(_QWORD *)(i + 624) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
          _InterlockedOr((volatile signed __int32 *)(i + 824), 0x10u);
        }
        else
        {
          *(_QWORD *)(i + 624) = 0i64;
          *(_BYTE *)(i + 608) = 0;
        }
        KxReleaseSpinLock((UINT64 *)(i + 600));
        __writecr8(v11);
        v12 = 0;
        v13 = 0;
        if( !*(_DWORD *)(i + 828) )
          goto LABEL_17;
        do
        {
          v14 = *(_QWORD *)(*(_QWORD *)(i + 832) + 8i64 * v13) + 200i64;
          MinimumComponentIdleState = PopPepGetMinimumComponentIdleState(*(_QWORD *)(i + 56), v13, a1, &a4);
          KeAcquireSpinLockRaiseToDpc((UINT64 *)v14, v16);
          v18 = v17;
          *(_DWORD *)(v14 + 16) = v3;
          memset(v14 + 32, 0i64);
          if( MinimumComponentIdleState && (_DWORD)a4 )
          {
            v12 = 1;
            *(_DWORD *)(v14 + 12) = a4;
            *(_BYTE *)(v14 + 8) = 1;
            *(_QWORD *)(v14 + 24) = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
            _InterlockedOr((volatile signed __int32 *)(i + 824), 0x10u);
          }
          else
          {
            *(_BYTE *)(v14 + 8) = 0;
            *(_QWORD *)(v14 + 24) = 0i64;
          }
          KxReleaseSpinLock((UINT64 *)v14);
          __writecr8(v18);
          ++v13;
        }
        while( v13 < *(_DWORD *)(i + 828) );
        v7 = Pdo;
        v1 = a1;
        if( v12 )
          _InterlockedOr((volatile signed __int32 *)(i + 824), 0x100u);
        else
LABEL_17:
          _InterlockedAnd((volatile signed __int32 *)(i + 824), 0xFFFFFEFF);
        PoFxIdleDevice(v7);
      }
    }
    if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
    KeAbPostRelease(&PopFxDeviceListLock);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    ZwUpdateWnfStateData();
  }
}

Referenced by:

PopFxEnablePlatformStates