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