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