EtwpDeleteSessionDemuxObject
VOID __stdcall EtwpDeleteSessionDemuxObject(INT64 *a1){
_QWORD *v1;
_EX_PUSH_LOCK *EtwSiloState;
_ETHREAD *CurrentThread;
INT64 v5;
INT64 **v6;
v1 = (_QWORD *)a1[3];
if( v1 )
{
EtwSiloState = (_EX_PUSH_LOCK *)PsGetCurrentServerSiloGlobals((_KSPIN_LOCK *)a1)->EtwSiloState;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx(EtwSiloState + 512, 0i64);
v5 = *a1;
if( *(INT64 **)(*a1 + 8) != a1 || (v6 = (INT64 **)a1[1], *v6 != a1) )
__fastfail(3u);
*v6 = (INT64 *)v5;
*(_QWORD *)(v5 + 8) = v6;
a1[3] = 0i64;
if( (_QWORD *)v1[4] == v1 + 4 )
{
RtlRbRemoveNode((UINT64 *)&EtwSiloState[510], (UINT64)v1);
ExFreePoolWithTag(v1, 0);
}
ExReleasePushLockEx((_DWORD)EtwSiloState + 4096, 0);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
}Referenced by:
No references.