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.