TtmpUpdateTerminalState
VOID __fastcall TtmpUpdateTerminalState(INT64 a1, INT64 a2, CHAR *a3, CHAR *a4){
int v7;
int v8;
int v9;
unsigned int v10;
_BOOL8 v11;
CHAR v12;
int v13;
int v14;
int v15;
CHAR v16;
INT64 a3a[2];
__int128 v18;
INT64 a2a[5];
char v20;
bool v21;
__int16 v22;
int v23;
int v24;
int v25;
a2a[0] = *(unsigned int *)(a2 + 40);
a2a[1] = *(_QWORD *)(a2 + 80);
v22 = 0;
v25 = 0;
*(_OWORD *)a3a = 0i64;
a2a[2] = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
a2a[3] = *(_QWORD *)(a2 + 64);
a2a[4] = *(_QWORD *)(a2 + 72);
v7 = *(_DWORD *)(a2 + 36);
v18 = 0i64;
if( *(_DWORD *)(a2 + 32) || (v20 = 0, (v7 & 8) != 0) )
v20 = 1;
v21 = (v7 & 0x60) != 0;
*(_DWORD *)(a2 + 36) = v7 & 0xFFFFFF9F;
v23 = *(_DWORD *)(a2 + 52);
v8 = *(_DWORD *)(a2 + 56);
*(_QWORD *)(a2 + 52) = 0i64;
v24 = v8;
TtmpTsmIterate((INT64)a2a, (INT64)a3a);
TtmiLogTerminalStateMachine(*(unsigned int *)(a2 + 28), (INT64)a2a, a3a);
v9 = a3a[0];
*(_QWORD *)(a2 + 80) = v18;
*(_DWORD *)(a2 + 40) = v9;
if( !BYTE4(a3a[0])
|| (v10 = *(_DWORD *)(a2 + 36), *(_DWORD *)(a2 + 44) = a3a[1], v11 = v9 != 1, ((v10 >> 4) & 1) == v11) )
{
v12 = 0;
}
else
{
v12 = 1;
*(_DWORD *)(a2 + 36) = v10 & 0xFFFFFFEF | (16 * v11);
}
*a3 = v12;
v13 = *(_DWORD *)(a2 + 44);
if( (*(_DWORD *)(a2 + 36) & 8) != 0 )
v14 = 0;
else
v14 = *(_DWORD *)(a2 + 40);
v15 = *(_DWORD *)(a2 + 276);
if( v15 == v14 )
{
v16 = 0;
}
else
{
if( !v15 || !v14 )
v13 = 22;
*(_DWORD *)(a2 + 280) = v13;
v15 = v14;
*(_DWORD *)(a2 + 276) = v14;
v16 = 1;
}
*a4 = v16;
if( v15 )
{
if( v15 == 1 )
*(_DWORD *)(a2 + 48) = 2;
else
*(_DWORD *)(a2 + 48) = 0;
}
else
{
*(_DWORD *)(a2 + 48) = 1;
}
TtmpResetEvaluationTimer((PADAPTER_OBJECT)a2, *((__int64 *)&v18 + 1));
}Referenced by:
TtmiSessionTerminalListWorker