EtwpFreeStackCache
VOID __stdcall EtwpFreeStackCache(_ETW_STACK_CACHE *StackCache){
__int64 i;
_ETW_STACK_CACHE *v3;
_QWORD *v4;
__int64 v5;
_QWORD *v6;
_QWORD *v7;
_QWORD *v8;
void *v9;
for( i = 0i64; (unsigned int)i < StackCache[2]; i = (unsigned int)(i + 1) )
{
while( 1 )
{
v3 = &StackCache[4 * i + 8 + 2 * i];
v4 = *(_QWORD **)v3;
if( *(_ETW_STACK_CACHE **)v3 == v3 )
break;
if( (_ETW_STACK_CACHE *)v4[1] != v3 || (v5 = *v4, *(_QWORD **)(*v4 + 8i64) != v4) )
__fastfail(3u);
*(_QWORD *)v3 = v5;
*(_QWORD *)(v5 + 8) = v3;
do
{
v6 = (_QWORD *)v4[2];
ExFreePoolWithTag(v4, 0);
v4 = v6;
}
while( v6 );
}
}
RtlpInterlockedFlushSList();
v8 = v7;
while( v8 )
{
v9 = v8;
v8 = (_QWORD *)*v8;
ExFreePoolWithTag(v9, 0);
}
ExFreePoolWithTag(StackCache, 0);
}Referenced by:
EtwpEnableStackCaching
EtwpFreeLoggerContext