PopFxResidentTimeoutRoutine
VOID __stdcall PopFxResidentTimeoutRoutine(VOID *Parameter){
_ETHREAD *CurrentThread;
__int64 v2;
POHANDLE v3;
__int64 v4;
unsigned int i;
__int64 v6;
INT64 CurrentQpc;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C23628 + 489, 0i64);
if( (_UNKNOWN *)*(&stru_140C23628 + 485) != (_UNKNOWN *)((char *)&stru_140C23628 + 3880) )
{
LODWORD(v2) = RtlGetInterruptTimePrecise(&CurrentQpc);
v3 = (POHANDLE)*(&stru_140C23628 + 485);
v4 = v2;
while( v3 != (POHANDLE)((char *)&stru_140C23628 + 3880) )
{
for( i = 0; i < *((_DWORD *)v3 + 207); ++i )
{
v6 = *(_QWORD *)(*((_QWORD *)v3 + 104) + 8i64 * i);
if( *(int *)(v6 + 96) > 0
&& v4 - *(_QWORD *)(v6 + 144) >= (unsigned __int64)(unsigned int)PopFxActiveIdleThreshold )
{
_InterlockedAdd((volatile signed __int32 *)(v6 + 96), 0xFFFFFFFF);
_InterlockedAdd((_DWORD *)&stru_140C23628 + 990, 0xFFFFFFFF);
PopFxIdleComponent((POHANDLE *)v3, i, 1ui64, 0i64);
}
}
v3 = *(POHANDLE *)v3;
}
}
if( _InterlockedCompareExchange64((_QWORD *)&stru_140C23628 + 489, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C23628 + 489);
KeAbPostRelease((char *)&stru_140C23628 + 3912);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
PopFxArmResidentTimer(1u);
}Referenced by:
No references.