FsRtlPruneTunnelCache
VOID __stdcall FsRtlPruneTunnelCache(TUNNEL *Cache, _LIST_ENTRY *FreePoolList){
LIST_ENTRY *p_TimerQueue;
__int64 v5;
__int64 v6;
_LIST_ENTRY *Flink;
struct _RTL_SPLAY_LINKS *p_Blink;
_LIST_ENTRY *v9;
char v10;
v10 = 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 = (struct _RTL_SPLAY_LINKS *)&Flink[-2].Blink;
v9 = Flink[1].Flink;
if( (__int64)v9 >= v6 && (__int64)v9 <= v5 )
break;
FsRtlRemoveNodeFromTunnel((__int64)Cache, p_Blink, (__int64)FreePoolList, &v10);
}
while( Cache->NumEntries > (unsigned int)TunnelMaxEntries )
FsRtlRemoveNodeFromTunnel(
(__int64)Cache,
(struct _RTL_SPLAY_LINKS *)&p_TimerQueue->Flink[-2].Blink,
(__int64)FreePoolList,
&v10);
}Referenced by:
FsRtlAddToTunnelCacheEx
FsRtlFindInTunnelCacheEx