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;
}