KeCleanupImageTracepoints
VOID __stdcall KeCleanupImageTracepoints(
UINT64 SessionId,
UINT64 LastInputTime,
POWER_SESSION_TIMEOUTS *SessionTimeouts){
unsigned __int64 v4;
_ETHREAD *CurrentThread;
unsigned __int64 v6;
void **v7;
unsigned __int64 v8;
void **v9;
void **v10;
void *v11;
int v12[14];
if( qword_140CFBBD0 )
qword_140CFBBD0(SessionId, LastInputTime, SessionTimeouts);
if( KiTpHashTable )
{
v4 = *(_QWORD *)(SessionId + 48);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v6 = v4 + *(unsigned int *)(SessionId + 64) - 1i64;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&KiTpStateLock, 0i64);
v7 = (void **)(KiTpHashTable + 8 * ((v4 >> 4) & 0x3FFF));
v8 = KiTpHashTable + 8 * ((v6 >> 4) & 0x3FFF);
while( (unsigned __int64)v7 <= v8 )
{
v9 = (void **)*v7;
v10 = v7;
while( v9 )
{
v11 = v9[1];
if( (unsigned __int64)v11 < v4 || (unsigned __int64)v11 > v6 )
{
v10 = v9;
}
else
{
if( *((_BYTE *)v9 + 48) )
{
if( !--KiTpEnabledCount )
_InterlockedAnd(&KiDynamicTraceMask, 0xFFFFFFFD);
}
*v10 = *v9;
_InterlockedOr(v12, 0);
--KiTpRegisteredCount;
while( KiTpActiveTrapsCount )
_mm_pause();
ExFreePoolWithTag(v9, 0x70727446u);
}
v9 = (void **)*v10;
}
++v7;
}
if( (_InterlockedExchangeAdd64(&KiTpStateLock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(&KiTpStateLock);
KeAbPostRelease(&KiTpStateLock);
KeLeaveCriticalRegion();
}
}Referenced by:
No references.