TtmiCloseEventQueue
VOID __fastcall TtmiCloseEventQueue(_BYTE *a1){
_ETHREAD *CurrentThread;
_QWORD **v3;
_QWORD *v4;
_QWORD *v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite((ERESOURCE *)(a1 + 24), 1u);
a1[168] = 0;
v3 = (_QWORD **)(a1 + 152);
while( 1 )
{
v4 = *v3;
if( *v3 == v3 )
break;
if( (_QWORD **)v4[1] != v3 || (v5 = (_QWORD *)*v4, *(_QWORD **)(*v4 + 8i64) != v4) )
__fastfail(3u);
*v3 = v5;
v5[1] = v3;
ExFreePoolWithTag(v4, 0x716D7454u);
}
KeSetEvent((PRKEVENT)(a1 + 128), 0);
ExReleaseResourceLite((PERESOURCE)(a1 + 24));
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}Referenced by:
TtmiWriteEventToAllQueues