TtmiWriteEventToSingleQueue

INT64 __fastcall TtmiWriteEventToSingleQueue(INT64 a1, _OWORD *a2){
  _ETHREAD *CurrentThread; 
  unsigned int v5; 
  INT64 v6; 
  _QWORD *PoolWithTag; 
  _QWORD *v8; 
  __int64 v9; 
  _OWORD *v10; 
  __int128 v11; 
  _QWORD *v12; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite((ERESOURCE *)(a1 + 24), 1u);
  v5 = 0;
  if( !*(_BYTE *)(a1 + 168) )
  {
    v5 = -1073740032;
    v6 = 412i64;
LABEL_3:
    TtmiLogError((PSTR)"TtmiWriteEventToSingleQueue", v6, 0xFFFFFFFFi64, v5);
    goto LABEL_11;
  }
  PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x230ui64, 0x716D7454ui64);
  v8 = PoolWithTag;
  if( !PoolWithTag )
  {
    v5 = -1073741670;
    v6 = 425i64;
    goto LABEL_3;
  }
  memset((INT64)PoolWithTag, 0i64);
  v9 = 4i64;
  v10 = v8 + 2;
  do
  {
    *v10 = *a2;
    v10[1] = a2[1];
    v10[2] = a2[2];
    v10[3] = a2[3];
    v10[4] = a2[4];
    v10[5] = a2[5];
    v10[6] = a2[6];
    v10 += 8;
    v11 = a2[7];
    a2 += 8;
    *(v10 - 1) = v11;
    --v9;
  }
  while( v9 );
  *v10 = *a2;
  v10[1] = a2[1];
  TtmiLogQueueEnqueueEvent();
  v12 = *(_QWORD **)(a1 + 160);
  if( *v12 != a1 + 152 )
    __fastfail(3u);
  v8[1] = v12;
  *v8 = a1 + 152;
  *v12 = v8;
  *(_QWORD *)(a1 + 160) = v8;
  KeSetEvent((PRKEVENT)(a1 + 128), 0);
LABEL_11:
  ExReleaseResourceLite((PERESOURCE)(a1 + 24));
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return v5;
}

Referenced by:

TtmiWriteEnumerationEventsToQueue
TtmiWriteEventToAllQueues
TtmpPublishDeviceEvent
TtmpWriteDisplayRequiredPowerRequestUpdatedEvent