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