EtwDeleteSiloState
void __fastcall EtwDeleteSiloState(PVOID P){
unsigned int v2;
unsigned int v3;
unsigned int i;
_ETHREAD *CurrentThread;
INT64 *v6;
signed int j;
unsigned int k;
struct _EX_RUNDOWN_REF_CACHE_AWARE *v9;
void *v10;
if( !P )
goto LABEL_19;
v2 = *((_DWORD *)P + 4);
v3 = 0;
if( v2 )
{
while( *(_QWORD *)(*((_QWORD *)P + 57) + 8i64 * v3) == 1i64 )
{
if( ++v3 >= v2 )
goto LABEL_5;
}
LABEL_19:
KeBugCheck(0x11Dui64);
}
LABEL_5:
for( i = 0; i < 0x40; ++i )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v6 = (INT64 *)((char *)P + 56 * i + 464);
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)(v6 + 6), 0i64);
for( j = 0; (unsigned int)j < 3; ++j )
{
if( (INT64 *)v6[2 * j] != &v6[2 * j] )
goto LABEL_19;
}
if( _InterlockedCompareExchange64(v6 + 6, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(v6 + 6);
KeAbPostRelease(v6 + 6);
KeLeaveCriticalRegion();
}
for( k = 0; k < *((_DWORD *)P + 4); ++k )
{
v9 = *(struct _EX_RUNDOWN_REF_CACHE_AWARE **)(*((_QWORD *)P + 56) + 8i64 * k);
if( v9 )
ExFreeCacheAwareRundownProtection(v9);
}
ExFreePoolWithTag(*((PVOID *)P + 517), 0x61777445u);
ExFreePoolWithTag(*((PVOID *)P + 56), 0x61777445u);
v10 = (void *)*((_QWORD *)P + 524);
if( v10 )
ExFreePoolWithTag(v10, 0x61777445u);
ExFreePoolWithTag(P, 0x61777445u);
}Referenced by:
PspDeleteServerSiloGlobals