PopFxPauseDeviceAccounting

VOID __stdcall PopFxPauseDeviceAccounting(){
  _ETHREAD *CurrentThread; 
  UINT64 v1; 
  UINT64 v2; 
  ULONG_PTR i; 
  unsigned __int8 v4; 
  unsigned __int64 v5; 
  _QWORD *v6; 
  unsigned int j; 
  UINT64 *v8; 
  unsigned __int8 v9; 
  unsigned __int64 v10; 
  _QWORD *v11; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockSharedEx((UINT64)&PopFxDeviceListLock, 0i64);
  v2 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  for( i = PopFxDeviceList; (ULONG_PTR *)i != &PopFxDeviceList; i = *(_QWORD *)i )
  {
    if( *(_QWORD *)(i + 48) )
    {
      if( PopFxDeviceAccountingLevel < 0 )
      {
        KeAcquireSpinLockRaiseToDpc((UINT64 *)(i + 600), v1);
        v5 = v4;
        PopFxUpdateAccountingActiveTime(i + 600, v2, 0x47868C00ui64);
        PopFxMergeActiveTimeAccounting(v6);
        KxReleaseSpinLock((UINT64 *)(i + 600));
        __writecr8(v5);
      }
      for( j = 0; j < *(_DWORD *)(i + 828); ++j )
      {
        v8 = (UINT64 *)(*(_QWORD *)(*(_QWORD *)(i + 832) + 8i64 * j) + 200i64);
        KeAcquireSpinLockRaiseToDpc(v8, v1);
        v10 = v9;
        PopFxUpdateAccountingActiveTime((INT64)v8, v2, 0x47868C00ui64);
        PopFxMergeActiveTimeAccounting(v11);
        KxReleaseSpinLock(v8);
        __writecr8(v10);
      }
    }
  }
  PopFxSetGlobalDeviceAccountingEnabled(0);
  PopFxDeviceAccountingPaused = 1;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
  KeAbPostRelease(&PopFxDeviceListLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PdcPoCurrentPdcPhase
PopPdcIdleResiliencyCallback