PopFxResumeDeviceAccounting

VOID __stdcall PopFxResumeDeviceAccounting(){
  _ETHREAD *CurrentThread; 
  UINT64 v1; 
  __int64 v2; 
  ULONG_PTR i; 
  unsigned __int8 v4; 
  unsigned __int64 v5; 
  unsigned int j; 
  __int64 v7; 
  unsigned __int8 v8; 
  unsigned __int64 v9; 
  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;
        memset(i + 728, 0i64);
        if( *(_BYTE *)(i + 608) )
          *(_QWORD *)(i + 624) = v2;
        KxReleaseSpinLock((UINT64 *)(i + 600));
        __writecr8(v5);
      }
      for( j = 0; j < *(_DWORD *)(i + 828); ++j )
      {
        v7 = *(_QWORD *)(*(_QWORD *)(i + 832) + 8i64 * j);
        KeAcquireSpinLockRaiseToDpc((UINT64 *)(v7 + 200), v1);
        v9 = v8;
        memset(v7 + 328, 0i64);
        if( *(_BYTE *)(v7 + 208) )
          *(_QWORD *)(v7 + 224) = v2;
        KxReleaseSpinLock((UINT64 *)(v7 + 200));
        __writecr8(v9);
      }
    }
  }
  PopFxSetGlobalDeviceAccountingEnabled(1);
  PopFxDeviceAccountingPaused = 0;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxDeviceListLock, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&PopFxDeviceListLock);
  KeAbPostRelease(&PopFxDeviceListLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}

Referenced by:

PdcPoCurrentPdcPhase
PopPdcIdleResiliencyCallback