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