TtmiSessionTerminalListWorker
void __fastcall TtmiSessionTerminalListWorker(__int64 a1, char *a2, _BYTE *a3){
__int64 v3;
INT64 v4;
char v5;
char v9;
unsigned int *v10;
INT64 v11;
int v12;
UINT64 v13;
_QWORD **v14;
bool v15;
char v16;
char v17;
__int64 v18;
_QWORD *v19;
unsigned int v20;
__int64 *i;
CHAR a4;
CHAR a3a;
unsigned int v24;
_QWORD **v25;
v3 = a1 + 40;
a3a = 0;
v4 = *(_QWORD *)(a1 + 40);
v5 = 0;
a4 = 0;
*a2 = 0;
*a3 = 0;
if( v4 != a1 + 40 )
{
v9 = 1;
do
{
v10 = (unsigned int *)(v4 + 36);
v11 = v4;
v12 = *(_DWORD *)(v4 + 36);
if( ((unsigned __int8)v12 & (unsigned __int8)v9) != 0 )
{
v13 = *(unsigned int *)a1;
v14 = (_QWORD **)(v4 + 8);
v4 = *(_QWORD *)(v4 + 8);
v25 = v14;
v24 = *(_DWORD *)(v11 + 28);
TtmiLogTerminalCleanup((PVOID)v11, v13, v24);
if( (*v10 & 0x10) != 0 )
{
v15 = TtmiUpdateActiveTerminalCount((_DWORD *)a1, 0, 26i64) == 0;
v17 = v16 + 1;
if( !v15 )
*a2 = v17;
}
else
{
v17 = 1;
}
if( *(_DWORD *)(v11 + 32) )
v5 = v17;
if( TtmiEvacuateDevices(a1, v11) )
*a3 = 1;
v18 = *(_QWORD *)v11;
if( *(_QWORD *)(*(_QWORD *)v11 + 8i64) != v11 || (v19 = *v25, **v25 != v11) )
__fastfail(3u);
*v19 = v18;
*(_QWORD *)(v18 + 8) = v19;
*(_QWORD *)(v11 + 16) = 0i64;
TtmpDereferenceSessionMaybeLast((volatile INT32 *)a1);
_bittestandreset(*(signed __int32 **)(a1 + 64), v24);
v20 = *v10;
*(_QWORD *)(v11 + 16) = 0i64;
*(_DWORD *)(v11 + 24) = 1417180244;
*v10 = v20 & 0xFFFFFFFC | 2;
HalPutDmaAdapter((PADAPTER_OBJECT)v11);
v9 = 1;
}
else if( (v12 & 4) != 0 )
{
*v10 = v12 & 0xFFFFFFFB;
TtmpUpdateTerminalState(a1, v4, &a3a, &a4);
if( a4 )
{
for( i = *(__int64 **)(a1 + 96); i != (__int64 *)(a1 + 96); i = (__int64 *)*i )
{
if( *((_DWORD *)i + 149) == *(_DWORD *)(v4 + 28) )
*((_DWORD *)i + 150) |= 0x40u;
}
TtmpWriteDisplayStateChangedEvent(a1, (_DWORD *)v4);
v9 = 1;
*a3 = 1;
}
else
{
v9 = 1;
}
if( a3a && TtmiUpdateActiveTerminalCount((_DWORD *)a1, (*v10 & 0x10) != 0, *(unsigned int *)(v4 + 44)) )
*a2 = v9;
}
v4 = *(_QWORD *)v4;
}
while( v4 != v3 );
if( v5 )
TtmiPurgeSessionPowerRequestEntries(a1);
}
}Referenced by:
TtmpSessionWorker