TtmiSessionDeviceListWorker
void __fastcall TtmiSessionDeviceListWorker(__int64 a1){
__int64 v1;
__int64 i;
int v4;
void *v5;
unsigned int v6;
int v7;
int v8;
void(__fastcall *v9)(_QWORD);
__int64 v10;
void **v11;
INT64 v12;
INT64 v13[2];
__int128 v14;
__int64 v15;
v1 = a1 + 96;
for( i = *(_QWORD *)(a1 + 96); i != v1; i = *(_QWORD *)i )
{
v4 = *(_DWORD *)(i + 600);
v5 = (void *)i;
if( (v4 & 4) != 0 )
goto LABEL_14;
if( (v4 & 1) != 0 )
{
v6 = v4 & 0xFFFFFFFC | 2;
*(_DWORD *)(i + 600) = v6;
if( (*(_DWORD *)(a1 + 4) & 0x800) != 0 )
{
*(_DWORD *)(i + 596) = 0;
v6 |= 0x40u;
}
v7 = 3;
}
else
{
if( (v4 & 0x10) == 0 )
goto LABEL_12;
v6 = v4 & 0xFFFFFFEF;
*(_DWORD *)(i + 600) = v6;
if( (*(_DWORD *)(a1 + 4) & 0x800) != 0 )
{
*(_DWORD *)(i + 596) = 0;
v6 |= 0x40u;
}
v7 = 4;
}
*(_DWORD *)(i + 600) = v6 | 0x20;
TtmpPublishDeviceEvent(a1, 0i64, i, v7);
LABEL_12:
v4 = *(_DWORD *)(i + 600);
if( (v4 & 0x20) != 0 )
{
*(_DWORD *)(i + 600) = v4 & 0xFFFFFFDF;
TtmpCallAssignedToTerminal((INT64 *)a1, i);
v4 = *(_DWORD *)(i + 600);
}
LABEL_14:
if( (v4 & 0x44) == 64 )
{
*(_DWORD *)(i + 600) = v4 & 0xFFFFFFBF;
if( TtmpPushTerminalState((INT64 *)a1, i) )
{
*(_DWORD *)(i + 600) |= 0x40u;
*(_DWORD *)(a1 + 4) |= 0x1000u;
}
}
v8 = *(_DWORD *)(i + 600);
if( (v8 & 4) != 0 )
{
if( (v8 & 2) != 0 )
{
*(_DWORD *)(i + 600) = v8 | 8;
TtmpPublishDeviceEvent(a1, 0i64, i, 5);
}
v9 = *(void(__fastcall **)(_QWORD))(i + 40);
if( v9 )
{
LODWORD(v12) = 0;
v15 = 0i64;
*(_OWORD *)v13 = 0i64;
v14 = 0i64;
TtmpStartCallout((INT64)v13, (INT64 *)a1, i, 2i64, (INT64)v9, v12);
v9(*(_QWORD *)(i + 24));
TtmpStopCallout((__int64)v13, 0);
}
v10 = *(_QWORD *)i;
v11 = *(void ***)(i + 8);
i = (__int64)v11;
if( *(void **)(*(_QWORD *)v5 + 8i64) != v5 || *v11 != v5 )
__fastfail(3u);
*v11 = (void *)v10;
*(_QWORD *)(v10 + 8) = v11;
--*(_DWORD *)(a1 + 116);
ExFreePoolWithTag(v5, 0x446D7454u);
}
}
TtmpCommitTerminalDisplayStateUpdateWorker(a1, 0i64);
TtmpCommitTerminalDisplayStateUpdateWorker(a1, 1i64);
TtmpCommitTerminalDisplayStateUpdateWorker(a1, 2i64);
TtmpCommitTerminalDisplayStateUpdateWorker(a1, 3i64);
}Referenced by:
TtmpSessionWorker