EtwpDeleteSessionDemuxObject

void __fastcall EtwpDeleteSessionDemuxObject(_QWORD *a1){
  _QWORD *v1; 
  __int64 v3; 
  _ETHREAD *CurrentThread; 
  _QWORD *v5; 
  _QWORD **v6; 
  v1 = (_QWORD *)a1[3];
  if( v1 )
  {
    v3 = PsGetCurrentServerSiloGlobals()[108];
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    ExAcquirePushLockExclusiveEx(v3 + 4096, 0i64);
    v5 = (_QWORD *)*a1;
    if( *(_QWORD **)(*a1 + 8i64) != a1 || (v6 = (_QWORD **)a1[1], *v6 != a1) )
      __fastfail(3u);
    *v6 = v5;
    v5[1] = v6;
    a1[3] = 0i64;
    if( (_QWORD *)v1[4] == v1 + 4 )
    {
      RtlRbRemoveNode((unsigned __int64 *)(v3 + 4080), (unsigned __int64)v1);
      ExFreePoolWithTag(v1, 0);
    }
    ExReleasePushLockEx(v3 + 4096, 0i64);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  }
}

Referenced by:

No references.