TtmpCommitTerminalDisplayStateUpdateWorker
VOID __stdcall TtmpCommitTerminalDisplayStateUpdateWorker(_TTMI_SESSION *LockedSession, INT64 a2){
__int64 v2;
_TTMI_SESSION *v4;
char v5;
_QWORD *v6;
__int64 v7;
__int64 v8;
_QWORD *v9;
_TTMI_DEVICE_ENTRY Device[156];
v2 = (int)a2;
memset(Device, 0i64, 0x268u);
v4 = &LockedSession[4 * v2 + 32];
Device[8] = -1;
v5 = 0;
*(_QWORD *)&Device[6] = 0xFFFFFFFFi64;
v6 = *(_QWORD **)v4;
if( *(_TTMI_SESSION **)v4 != v4 )
{
do
{
if( (unsigned __int8)TtmpFindDeviceByDeviceId((INT64)LockedSession) )
{
v7 = *(_QWORD *)&Device[14];
if( !*(_QWORD *)&Device[14] && MEMORY[0x38] )
{
v5 = 1;
Device[4] = MEMORY[0x10];
Device[18] = MEMORY[0x48];
v7 = MEMORY[0x38];
*(_QWORD *)&Device[14] = MEMORY[0x38];
}
if( v5 && MEMORY[0x38] && MEMORY[0x38] != v7 )
{
TtmpPushTerminalDisplayStateOntoDevice(LockedSession, Device, (_TERMINAL_DISPLAY_STATE)v2);
Device[4] = MEMORY[0x10];
Device[18] = MEMORY[0x48];
*(_QWORD *)&Device[14] = MEMORY[0x38];
}
TtmpPushTerminalDisplayStateOntoDevice(LockedSession, 0i64, (_TERMINAL_DISPLAY_STATE)v2);
}
else
{
TtmiLogError((INT8 *)"TtmpCommitTerminalDisplayStateUpdateWorker", 0xBA6ui64, 3221226021i64, 0xFFFFFFFFi64);
}
v8 = *v6;
v9 = (_QWORD *)v6[1];
if( *(_QWORD **)(*v6 + 8i64) != v6 || (_QWORD *)*v9 != v6 )
__fastfail(3u);
*v9 = v8;
*(_QWORD *)(v8 + 8) = v9;
ExFreePoolWithTag(v6, 0x446D7454u);
v6 = (_QWORD *)*v9;
}
while( (_TTMI_SESSION *)*v9 != v4 );
if( v5 )
TtmpPushTerminalDisplayStateOntoDevice(LockedSession, Device, (_TERMINAL_DISPLAY_STATE)v2);
}
}Referenced by:
TtmiSessionDeviceListWorker