TtmiWriteEventToSingleQueue
__int64 __fastcall TtmiWriteEventToSingleQueue(__int64 a1, _OWORD *a2, INT64 a3){
_ETHREAD *CurrentThread;
unsigned int v6;
UINT64 v7;
VOID **PoolWithTag;
VOID **v9;
__int64 v10;
_OWORD *v11;
__int128 v12;
VOID ***v13;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite(a1 + 24, 1, a3);
v6 = 0;
if( !*(_BYTE *)(a1 + 168) )
{
v6 = -1073740032;
v7 = 412i64;
LABEL_3:
TtmiLogError((INT8 *)"TtmiWriteEventToSingleQueue", v7, 0xFFFFFFFFi64, v6);
goto LABEL_11;
}
PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x230ui64, 1902998612i64);
v9 = PoolWithTag;
if( !PoolWithTag )
{
v6 = -1073741670;
v7 = 425i64;
goto LABEL_3;
}
memset(PoolWithTag, 0i64, 0x230u);
v10 = 4i64;
v11 = v9 + 2;
do
{
*v11 = *a2;
v11[1] = a2[1];
v11[2] = a2[2];
v11[3] = a2[3];
v11[4] = a2[4];
v11[5] = a2[5];
v11[6] = a2[6];
v11 += 8;
v12 = a2[7];
a2 += 8;
*(v11 - 1) = v12;
--v10;
}
while( v10 );
*v11 = *a2;
v11[1] = a2[1];
TtmiLogQueueEnqueueEvent();
v13 = *(VOID ****)(a1 + 160);
if( *v13 != (VOID **)(a1 + 152) )
__fastfail(3u);
v9[1] = v13;
*v9 = (VOID *)(a1 + 152);
*v13 = v9;
*(_QWORD *)(a1 + 160) = v9;
KeSetEvent((PRKEVENT)(a1 + 128), 0, 0);
LABEL_11:
ExReleaseResourceLite((PERESOURCE)(a1 + 24));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
return v6;
}Referenced by:
TtmiWriteEnumerationEventsToQueue
TtmiWriteEventToAllQueues
TtmpPublishDeviceEvent
TtmpWriteDisplayRequiredPowerRequestUpdatedEvent