TtmpDeleteQueue

VOID __stdcall TtmpDeleteQueue(VOID *Object){
  INT64 v1; 
  _ETHREAD *CurrentThread; 
  _QWORD *v4; 
  _TTMI_SESSION *v5; 
  VOID **v6; 
  _QWORD **v7; 
  _QWORD *v8; 
  _QWORD *v9; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite((UINT64)&TtmpSessionLock, 1, v1);
  v4 = *(_QWORD **)Object;
  v5 = (_TTMI_SESSION *)*((_QWORD *)Object + 2);
  if( *(VOID **)(*(_QWORD *)Object + 8i64) != Object || (v6 = (VOID **)*((_QWORD *)Object + 1), *v6 != Object) )
LABEL_9:
    __fastfail(3u);
  *v6 = v4;
  v4[1] = v6;
  ExReleaseResourceLite(&TtmpSessionLock);
  KeLeaveCriticalRegion();
  TtmpDereferenceSessionMaybeLast(v5);
  ExDeleteResourceLite((UINT64)Object + 24);
  v7 = (_QWORD **)((char *)Object + 152);
  while( 1 )
  {
    v8 = *v7;
    if( *v7 == v7 )
      break;
    if( (_QWORD **)v8[1] != v7 )
      goto LABEL_9;
    v9 = (_QWORD *)*v8;
    if( *(_QWORD **)(*v8 + 8i64) != v8 )
      goto LABEL_9;
    *v7 = v9;
    v9[1] = v7;
    ExFreePoolWithTag(v8, 0x716D7454u);
  }
  TtmiLogQueueDestroyed(Object);
}

Referenced by:

No references.