TtmiSetDisplayPowerRequest

NTSTATUS __stdcall TtmiSetDisplayPowerRequest(
        _TTMI_SESSION *LockedSession,
        _TTMI_TERMINAL *Terminal,
        UINT64 a3,
        UINT64 a4){
  unsigned int v4; 
  unsigned int v5; 
  unsigned int v7; 
  UINT64 v9; 
  INT64 v10; 
  __int64 i; 
  __int64 *v12; 
  _TTMI_TERMINAL v13; 
  bool v14; 
  VOID **PoolWithTag; 
  INT64 v16; 
  INT64 v17; 
  _QWORD *v18; 
  _QWORD *v19; 
  INT64 v20; 
  __int64 j; 
  _QWORD *v22; 
  __int64 v24; 
  _QWORD *v25; 
  _TTMI_TERMINAL v26; 
  _TTMI_TERMINAL v27; 
  UINT64 PathTag; 
  INT64 v29; 
  _TTMI_TERMINAL *Terminala[4]; 

  v4 = 0;
  v5 = a3;
  v29 = 0i64;
  Terminala[0] = 0i64;
  v7 = a4;
  if( (_DWORD)a4 )
  {
    if( !TtmpFindPowerRequestEntryById((INT64)LockedSession, (unsigned int)a3, &v29) )
    {
      v9 = 818i64;
LABEL_28:
      v4 = -1073741275;
      goto LABEL_29;
    }
    v10 = v29 + 48;
    for( i = *(_QWORD *)(v29 + 48); i != v10; i = *v12 )
    {
      if( TtmiGetTerminalById(Terminala, LockedSession, *(unsigned int *)(i - 8)) >= 0
        && Terminala[0][7] == Terminal[7] )
      {
        v4 = -1073741270;
        v9 = 861i64;
        goto LABEL_29;
      }
    }
    if( Terminal[8] == -1 )
    {
      v4 = -1073741675;
      v9 = 874i64;
      goto LABEL_29;
    }
    v13 = Terminal[10];
    v14 = (unsigned int)(v13 - 2) <= 1;
    if( v13 == 2 )
    {
      LODWORD(PathTag) = 1413571669;
      TtmiSetPendingOnOffRequest(LockedSession, Terminal, 1u, MonitorRequestReasonSetThreadExecutionState, PathTag);
    }
    if( !v14 )
    {
      v4 = -1073741637;
      goto LABEL_31;
    }
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x18ui64, 1381004372i64);
    if( !PoolWithTag )
    {
      v4 = -1073741670;
      v16 = 0xFFFFFFFFi64;
      v17 = 3221225626i64;
      v9 = 892i64;
      goto LABEL_30;
    }
    *(_OWORD *)PoolWithTag = 0i64;
    PoolWithTag[2] = 0i64;
    *(_DWORD *)PoolWithTag = Terminal[7];
    v18 = PoolWithTag + 1;
    v19 = *(_QWORD **)(v10 + 8);
    if( *v19 == v10 )
    {
      *v18 = v10;
      v18[1] = v19;
      *v19 = v18;
      *(_QWORD *)(v10 + 8) = v18;
      ++Terminal[8];
      goto LABEL_31;
    }
    goto LABEL_38;
  }
  if( !TtmpFindPowerRequestEntryById((INT64)LockedSession, (unsigned int)a3, &v29) )
  {
    v9 = 937i64;
    goto LABEL_28;
  }
  v20 = v29 + 48;
  for( j = *(_QWORD *)(v29 + 48); ; j = *v22 )
  {
    if( j == v20 )
    {
      v9 = 981i64;
      goto LABEL_28;
    }
    if( TtmiGetTerminalById(Terminala, LockedSession, *(unsigned int *)(j - 8)) >= 0 && Terminala[0][7] == Terminal[7] )
      break;
  }
  v24 = *v22;
  if( *(_QWORD **)(*v22 + 8i64) != v22 || (v25 = (_QWORD *)v22[1], (_QWORD *)*v25 != v22) )
LABEL_38:
    __fastfail(3u);
  *v25 = v24;
  *(_QWORD *)(v24 + 8) = v25;
  ExFreePoolWithTag(v22 - 1, 0x52507454u);
  v26 = Terminal[8];
  if( v26 )
  {
    v27 = v26 - 1;
    Terminal[8] = v27;
    if( !v27 )
    {
      Terminal[9] |= 0x24u;
      TtmiScheduleSessionWorker((__int64)LockedSession, 2);
    }
  }
  else
  {
    v4 = -1073741811;
    v9 = 1008i64;
LABEL_29:
    v17 = 0xFFFFFFFFi64;
    v16 = v4;
LABEL_30:
    TtmiLogError((INT8 *)"TtmiSetDisplayPowerRequest", v9, v16, v17);
  }
LABEL_31:
  TtmiLogDisplayPowerRequestSet((unsigned int)Terminal[7], v5, v7, v4);
  return v4;
}

Referenced by:

TtmpDispatchSetDisplayPowerRequest