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