TtmpSetDisplayRequestEnded

VOID __stdcall TtmpSetDisplayRequestEnded(_TTMI_SESSION *LockedSession, INT64 a2){
  char v3; 
  _QWORD **v4; 
  _QWORD *v5; 
  _QWORD *v6; 
  _QWORD *v7; 
  NTSTATUS TerminalById; 
  _TTMI_TERMINAL *v9; 
  _TTMI_TERMINAL v10; 
  _TTMI_TERMINAL v11; 
  INT64 v12; 
  _TTMI_TERMINAL *Terminal; 

  v12 = 0i64;
  Terminal = 0i64;
  v3 = 0;
  if( !TtmpFindPowerRequestEntryById((INT64)LockedSession, a2, &v12) )
    return;
  v4 = (_QWORD **)(v12 + 48);
  while( 1 )
  {
    v5 = *v4;
    if( *v4 == v4 )
      break;
    if( (_QWORD **)v5[1] != v4 || (v6 = (_QWORD *)*v5, *(_QWORD **)(*v5 + 8i64) != v5) )
      __fastfail(3u);
    *v4 = v6;
    v7 = v5 - 1;
    v6[1] = v4;
    TerminalById = TtmiGetTerminalById(&Terminal, LockedSession, *((unsigned int *)v5 - 2));
    if( TerminalById < 0 )
    {
      TtmiLogError((INT8 *)"TtmpSetDisplayRequestEnded", 0x2E0ui64, (unsigned int)TerminalById, 0xFFFFFFFFi64);
      goto LABEL_13;
    }
    v9 = Terminal;
    if( Terminal[6] != 1416459348 )
      goto LABEL_13;
    v10 = Terminal[8];
    if( v10 )
    {
      v11 = v10 - 1;
      Terminal[8] = v11;
      if( !v11 )
      {
        v9[9] |= 0x24u;
        v3 = 1;
      }
LABEL_13:
      ExFreePoolWithTag(v7, 0x52507454u);
    }
    else
    {
      TtmiLogError((INT8 *)"TtmpSetDisplayRequestEnded", 0x2CEui64, 3221225485i64, 0xFFFFFFFFi64);
    }
  }
  if( v3 )
    TtmiScheduleSessionWorker((__int64)LockedSession, 2);
}

Referenced by:

TtmpUpdateDisplayRequiredPowerRequest