TtmNotifySessionDisplayRequiredChange

VOID __stdcall TtmNotifySessionDisplayRequiredChange(UINT64 SessionId, UINT8 Increment){
  CHAR v2; 
  unsigned int v3; 
  unsigned int v4; 
  CHAR v5; 
  bool v6; 
  int v7; 
  _TTMI_SESSION *v8; 
  unsigned int v9; 
  INT64 v10; 
  UINT64 v11; 
  _TTMI_SESSION v12; 
  _TTMI_SESSION v13; 
  char v14; 
  _RM_COMMAND_MESSAGE *v15; 
  _RM_REPLY_MESSAGE *v16; 
  UINT64 v17; 
  UINT64 v18; 
  UINT64 SessionIda; 
  char Buffer; 
  _TTMI_SESSION *Session; 

  LODWORD(SessionIda) = SessionId;
  Session = 0i64;
  v3 = Increment;
  v4 = 0;
  Buffer = 0;
  v5 = v2;
  v6 = 0;
  v7 = (unsigned int)TtmpAcquireSessionById(&Session, (unsigned int)SessionId);
  v8 = Session;
  v9 = v7;
  if( v7 < 0 )
  {
    v10 = (unsigned int)v7;
    v11 = 3853i64;
LABEL_3:
    TtmiLogError((INT8 *)"TtmNotifySessionDisplayRequiredChange", v11, v10, 0xFFFFFFFFi64);
    goto LABEL_16;
  }
  TtmpUpdateDisplayRequiredPowerRequest((INT64)Session, v3, v5);
  v12 = v8[5];
  if( v5 )
  {
    if( v12 == -1 )
    {
      v9 = -1073741675;
      v11 = 3905i64;
      v10 = 3221225621i64;
      goto LABEL_3;
    }
    v6 = 0;
    v13 = v12 + 1;
    if( v13 == 1 )
      v6 = 1;
  }
  else
  {
    if( !v12 )
    {
      v9 = -1073741811;
      v11 = 3885i64;
      v10 = 3221225485i64;
      goto LABEL_3;
    }
    v13 = v12 - 1;
    v6 = v13 == 0;
  }
  v9 = 0;
  v8[5] = v13;
  if( v6 )
  {
    v14 = Buffer;
    if( v8[5] )
      v14 = 1;
    Buffer = v14;
  }
LABEL_16:
  if( v8 )
  {
    v4 = v8[5];
    ExReleaseResourceLite(&TtmpSessionLock);
    KeLeaveCriticalRegion();
  }
  if( v6 )
  {
    LODWORD(v18) = 0;
    LODWORD(v17) = 0;
    ZwUpdateWnfStateData(&WNF_PO_DISPLAY_REQUEST_ACTIVE, &Buffer, 1ui64, 0i64, &SessionIda, v17, v18);
    LOBYTE(v15) = Buffer;
    PoSessionEngagementUpdate(v15, v16);
  }
  if( v5 )
    TtmiLogSessionDisplayRequiredReference((unsigned int)SessionIda, v4, v9);
  else
    TtmiLogSessionDisplayRequiredDereference((unsigned int)SessionIda, v4, v9);
}

Referenced by:

PopNotifySessionDisplayRequired