EtwpFreeGuidEntry
VOID __stdcall EtwpFreeGuidEntry(_ETW_GUID_ENTRY *GuidEntry){
_ETW_FILTER_HEADER *FilterData;
_ETHREAD *CurrentThread;
_LIST_ENTRY *Flink;
_LIST_ENTRY *Blink;
if( GuidEntry->HostEntry )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(&GuidEntry->HostEntry->Lock, 0i64);
GuidEntry->HostEntry->LockOwner = (_ETHREAD *)KeGetCurrentThread();
Flink = GuidEntry->SiloGuidList.Flink;
if( Flink->Blink != &GuidEntry->SiloGuidList
|| (Blink = GuidEntry->SiloGuidList.Blink, Blink->Flink != &GuidEntry->SiloGuidList) )
{
__fastfail(3u);
}
Blink->Flink = Flink;
Flink->Blink = Blink;
GuidEntry->HostEntry->LockOwner = 0i64;
ExReleasePushLockEx((ULONG_PTR)&GuidEntry->HostEntry->Lock, 0);
KeLeaveCriticalRegion();
EtwpUnreferenceGuidEntry(GuidEntry->HostEntry);
}
ObDereferenceSecurityDescriptor(GuidEntry->SecurityDescriptor, 1ui64);
FilterData = GuidEntry->FilterData;
if( FilterData )
ExFreePoolWithTag(FilterData, 0);
_InterlockedAdd(&GuidEntry->SiloState->EtwpCounters.GuidCount, 0xFFFFFFFF);
ExFreePoolWithTag(GuidEntry, 0);
}Referenced by:
EtwpAddGuidEntry
EtwpUnreferenceGuidEntry