TtmpDeleteQueue

VOID __stdcall TtmpDeleteQueue(PVOID Object){
  _ETHREAD *CurrentThread; 
  _QWORD *v3; 
  volatile INT32 *v4; 
  PVOID *v5; 
  UINT64 *v6; 
  UINT64 v7; 
  INT64 v8; 
  _QWORD **v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  VOID *v12; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(&TtmpSessionLock, 1u);
  v3 = *(_QWORD **)Object;
  v4 = (volatile INT32 *)*((_QWORD *)Object + 2);
  if( *(PVOID *)(*(_QWORD *)Object + 8i64) != Object || (v5 = (PVOID *)*((_QWORD *)Object + 1), *v5 != Object) )
LABEL_9:
    __fastfail(3u);
  *v5 = v3;
  v3[1] = v5;
  ExReleaseResourceLite(&TtmpSessionLock);
  KeLeaveCriticalRegion();
  TtmpDereferenceSessionMaybeLast(v4);
  ExDeleteResourceLite((INT64)Object + 24, v6, v7, v8, v12);
  v9 = (_QWORD **)((char *)Object + 152);
  while( 1 )
  {
    v10 = *v9;
    if( *v9 == v9 )
      break;
    if( (_QWORD **)v10[1] != v9 )
      goto LABEL_9;
    v11 = (_QWORD *)*v10;
    if( *(_QWORD **)(*v10 + 8i64) != v10 )
      goto LABEL_9;
    *v9 = v11;
    v11[1] = v9;
    ExFreePoolWithTag(v10, 0x716D7454u);
  }
  TtmiLogQueueDestroyed(Object);
}

Referenced by:

No references.