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.