EtwDeleteSiloState
VOID __stdcall EtwDeleteSiloState(_ETW_SILODRIVERSTATE *SiloState){
unsigned int MaxLoggers;
int v3;
unsigned int i;
_ETHREAD *CurrentThread;
_ETW_HASH_BUCKET *v6;
signed int j;
unsigned int k;
_EX_RUNDOWN_REF_CACHE_AWARE *v9;
char *PartitionName;
if( !SiloState )
goto LABEL_19;
MaxLoggers = SiloState->MaxLoggers;
v3 = 0;
if( MaxLoggers )
{
while( SiloState->EtwpLoggerContext[v3] == (_WMI_LOGGER_CONTEXT *)1 )
{
if( ++v3 >= MaxLoggers )
goto LABEL_5;
}
LABEL_19:
KeBugCheck(0x11Du);
}
LABEL_5:
for( i = 0; i < 0x40; ++i )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v6 = &SiloState->EtwpGuidHashTable[i];
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx(&v6->BucketLock, 0i64);
for( j = 0; (unsigned int)j < 3; ++j )
{
if( v6->ListHead[j].Flink != &v6->ListHead[j] )
goto LABEL_19;
}
if( _InterlockedCompareExchange64(&v6->BucketLock._bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(&v6->BucketLock);
KeAbPostRelease(&v6->BucketLock);
KeLeaveCriticalRegion();
}
for( k = 0; k < SiloState->MaxLoggers; ++k )
{
v9 = SiloState->EtwpLoggerRundown[k];
if( v9 )
ExFreeCacheAwareRundownProtection((ULONG_PTR)v9);
}
ExFreePoolWithTag(SiloState->ProcessorBlocks, 0x61777445u);
ExFreePoolWithTag(SiloState->EtwpLoggerRundown, 0x61777445u);
PartitionName = SiloState->PartitionName;
if( PartitionName )
ExFreePoolWithTag(PartitionName, 0x61777445u);
ExFreePoolWithTag(SiloState, 0x61777445u);
}Referenced by:
PspDeleteServerSiloGlobals