EtwpCovSampContextCleanup
void __fastcall EtwpCovSampContextCleanup(INT64 a1){
_ETHREAD *CurrentThread;
_QWORD *v3;
_QWORD *v4;
_QWORD *v5;
_QWORD *i;
_QWORD *v7;
_QWORD *j;
__int64 v9;
_QWORD *v10;
_QWORD *v11;
_QWORD *v12;
_QWORD *k;
_QWORD *v14;
_QWORD *m;
__int64 v16;
_QWORD *v17;
__int64 v18;
void *v19;
EtwpCovSampProcessCleanup(a1 + 736, 0);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(a1 + 664), 0i64);
*(_QWORD *)(a1 + 672) = KeGetCurrentThread();
v3 = *(_QWORD **)(a1 + 688);
v4 = v3;
while( 1 )
{
if( !v4 )
goto LABEL_7;
v5 = (_QWORD *)*v4;
if( (*v4 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
v5 = (_QWORD *)*v4;
if( ((unsigned __int8)v5 & 1) != 0 )
{
LABEL_7:
for( i = v3 + 1; ; ++i )
{
if( (unsigned __int64)i >= *(_QWORD *)(a1 + 688) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 684) >> 5) )
{
v5 = 0i64;
goto LABEL_12;
}
if( (*i & 1) == 0 )
break;
}
v4 = (_QWORD *)*i;
v3 = i;
v5 = (_QWORD *)*i;
}
else
{
v4 = v5;
}
LABEL_12:
if( !v5 )
break;
v7 = v4;
for( j = v3; (*j & 1) == 0; j = (_QWORD *)*j )
{
if( (_QWORD *)*j == v4 )
{
v9 = *v4;
v4 = j;
*j = v9;
--*(_DWORD *)(a1 + 680);
goto LABEL_20;
}
}
v7 = 0i64;
LABEL_20:
*v7 = 0i64;
}
v10 = *(_QWORD **)(a1 + 704);
v11 = v10;
while( 1 )
{
if( !v11 )
goto LABEL_27;
v12 = (_QWORD *)*v11;
if( (*v11 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
v12 = (_QWORD *)*v11;
if( ((unsigned __int8)v12 & 1) != 0 )
{
LABEL_27:
for( k = v10 + 1; ; ++k )
{
if( (unsigned __int64)k >= *(_QWORD *)(a1 + 704) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 700) >> 5) )
{
v12 = 0i64;
goto LABEL_32;
}
if( (*k & 1) == 0 )
break;
}
v11 = (_QWORD *)*k;
v10 = k;
v12 = (_QWORD *)*k;
}
else
{
v11 = v12;
}
LABEL_32:
if( !v12 )
break;
v14 = v11;
for( m = v10; (*m & 1) == 0; m = (_QWORD *)*m )
{
if( (_QWORD *)*m == v11 )
{
v16 = *v11;
v11 = m;
*m = v16;
--*(_DWORD *)(a1 + 696);
goto LABEL_40;
}
}
v14 = 0i64;
LABEL_40:
*v14 = 0i64;
}
v17 = (_QWORD *)(a1 + 712);
while( (_QWORD *)*v17 != v17 )
{
v18 = *v17 - 72i64;
*(_DWORD *)(v18 + 132) = 0;
EtwpCovSampContextRemoveAndFreeModule(a1, (INT64 *)v18);
}
v19 = *(void **)(a1 + 688);
if( v19 )
ExFreePoolWithTag(v19, 0x56777445u);
*(_QWORD *)(a1 + 672) = 0i64;
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)(a1 + 664), 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((_EX_PUSH_LOCK *)(a1 + 664));
KeAbPostRelease((VOID *)(a1 + 664));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}Referenced by:
EtwpCoverageSamplerCleanup