TtmiSessionTerminalListWorker
VOID __stdcall TtmiSessionTerminalListWorker(
_TTMI_SESSION *LockedSession,
UINT8 *RunSessionWorker,
UINT8 *RunDeviceWorker){
_TTMI_SESSION *v3;
_TTMI_SESSION *v4;
UINT8 v5;
UINT8 v9;
unsigned int *v10;
__int64 *v11;
_TTMI_SESSION v12;
UINT64 v13;
__int64 ***v14;
bool v15;
char v16;
UINT8 v17;
__int64 *v18;
__int64 **v19;
unsigned int v20;
_TTMI_SESSION *i;
UINT8 DisplayStateChanged;
UINT8 ActiveChanged;
unsigned int v24;
__int64 ***v25;
v3 = LockedSession + 10;
ActiveChanged = 0;
v4 = (_TTMI_SESSION *)*((_QWORD *)LockedSession + 5);
v5 = 0;
DisplayStateChanged = 0;
*RunSessionWorker = 0;
*RunDeviceWorker = 0;
if( v4 != LockedSession + 10 )
{
v9 = 1;
do
{
v10 = (unsigned int *)(v4 + 9);
v11 = (__int64 *)v4;
v12 = v4[9];
if( ((unsigned __int8)v12 & v9) != 0 )
{
v13 = (unsigned int)*LockedSession;
v14 = (__int64 ***)(v4 + 2);
v4 = (_TTMI_SESSION *)*((_QWORD *)v4 + 1);
v25 = v14;
v24 = *((_DWORD *)v11 + 7);
TtmiLogTerminalCleanup(v11, v13, v24);
if( (*v10 & 0x10) != 0 )
{
v15 = TtmiUpdateActiveTerminalCount(LockedSession, 0, MonitorRequestReasonTerminal) == 0;
v17 = v16 + 1;
if( !v15 )
*RunSessionWorker = v17;
}
else
{
v17 = 1;
}
if( *((_DWORD *)v11 + 8) )
v5 = v17;
if( TtmiEvacuateDevices(LockedSession, (_TTMI_TERMINAL *)v11) )
*RunDeviceWorker = 1;
v18 = (__int64 *)*v11;
if( *(__int64 **)(*v11 + 8) != v11 || (v19 = *v25, **v25 != v11) )
__fastfail(3u);
*v19 = v18;
v18[1] = (__int64)v19;
v11[2] = 0i64;
TtmpDereferenceSessionMaybeLast(LockedSession);
_bittestandreset(*((signed __int32 **)LockedSession + 8), v24);
v20 = *v10;
v11[2] = 0i64;
*((_DWORD *)v11 + 6) = 1417180244;
*v10 = v20 & 0xFFFFFFFC | 2;
HalPutDmaAdapter((PADAPTER_OBJECT)v11);
v9 = 1;
}
else if( (v12 & 4) != 0 )
{
*v10 = v12 & 0xFFFFFFFB;
TtmpUpdateTerminalState(LockedSession, v4, &ActiveChanged, &DisplayStateChanged);
if( DisplayStateChanged )
{
for( i = (_TTMI_SESSION *)*((_QWORD *)LockedSession + 12); i != LockedSession + 24; i = *(_TTMI_SESSION **)i )
{
if( i[149] == v4[7] )
i[150] |= 0x40u;
}
TtmpWriteDisplayStateChangedEvent((__int64)LockedSession, v4);
v9 = 1;
*RunDeviceWorker = 1;
}
else
{
v9 = 1;
}
if( ActiveChanged
&& TtmiUpdateActiveTerminalCount(LockedSession, (*v10 & 0x10) != 0, (POWER_MONITOR_REQUEST_REASON)v4[11]) )
{
*RunSessionWorker = v9;
}
}
v4 = *(_TTMI_SESSION **)v4;
}
while( v4 != v3 );
if( v5 )
TtmiPurgeSessionPowerRequestEntries((INT64)LockedSession);
}
}Referenced by:
TtmpSessionWorker