TtmiCloseEventQueue

void __fastcall TtmiCloseEventQueue(__int64 a1, __int64 a2, INT64 a3){
  _ETHREAD *CurrentThread; 
  _QWORD **v5; 
  _QWORD *v6; 
  _QWORD *v7; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquireResourceExclusiveLite(a1 + 24, 1, a3);
  *(_BYTE *)(a1 + 168) = 0;
  v5 = (_QWORD **)(a1 + 152);
  while( 1 )
  {
    v6 = *v5;
    if( *v5 == v5 )
      break;
    if( (_QWORD **)v6[1] != v5 || (v7 = (_QWORD *)*v6, *(_QWORD **)(*v6 + 8i64) != v6) )
      __fastfail(3u);
    *v5 = v7;
    v7[1] = v5;
    ExFreePoolWithTag(v6, 0x716D7454u);
  }
  KeSetEvent((PRKEVENT)(a1 + 128), 0, 0);
  ExReleaseResourceLite((PERESOURCE)(a1 + 24));
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
}

Referenced by:

TtmiWriteEventToAllQueues