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