FsRtlPruneTunnelCache
VOID __stdcall FsRtlPruneTunnelCache(TUNNEL *Cache, _LIST_ENTRY *FreePoolList){
LIST_ENTRY *p_TimerQueue;
__int64 v5;
__int64 v6;
_LIST_ENTRY *Flink;
TUNNEL_NODE *p_Blink;
_LIST_ENTRY *v9;
UINT8 Splay;
Splay = 1;
p_TimerQueue = &Cache->TimerQueue;
v5 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart;
v6 = *(_QWORD *)&KUSER_SHARED_DATA.SystemTime.LowPart - (unsigned int)TunnelMaxAge;
while( 1 )
{
Flink = p_TimerQueue->Flink;
if( p_TimerQueue->Flink == p_TimerQueue )
break;
p_Blink = (TUNNEL_NODE *)&Flink[-2].Blink;
v9 = Flink[1].Flink;
if( (__int64)v9 >= v6 && (__int64)v9 <= v5 )
break;
FsRtlRemoveNodeFromTunnel(Cache, p_Blink, FreePoolList, &Splay);
}
while( Cache->NumEntries > (unsigned int)TunnelMaxEntries )
FsRtlRemoveNodeFromTunnel(Cache, (TUNNEL_NODE *)&p_TimerQueue->Flink[-2].Blink, FreePoolList, &Splay);
}Referenced by:
FsRtlAddToTunnelCacheEx
FsRtlFindInTunnelCacheEx