TtmpAcquireSessionFromTerminalHandle
INT64 __fastcall TtmpAcquireSessionFromTerminalHandle(VOID *a1, CHAR a2, CHAR a3, _QWORD *a4, INT64 *a5){
_ETHREAD *CurrentThread;
INT64 *v7;
KPROCESSOR_MODE v10;
_OBJECT_TYPE *v11;
NTSTATUS v12;
unsigned int v13;
INT64 v15;
INT64 v16;
unsigned int v17;
_ETHREAD *v18;
__int64 v19;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = a5;
*a4 = 0i64;
v10 = *((_BYTE *)CurrentThread + 562);
v11 = TtmpTerminalObjectType;
*v7 = 0i64;
a5 = 0i64;
v12 = ObReferenceObjectByHandle(a1, 2u, v11, v10, (PVOID *)&a5, 0i64);
v13 = v12;
if( v12 >= 0 )
{
v13 = 0;
*v7 = (INT64)a5;
}
else
{
*v7 = 0i64;
TtmiLogError((PSTR)"TtmiReferenceTerminalByHandle", 869i64, (unsigned int)v12, (unsigned int)v12);
}
if( (v13 & 0x80000000) != 0 )
{
TtmiLogError((PSTR)"TtmpAcquireSessionFromTerminalHandle", 88i64, v13, v13);
return v13;
}
v15 = *v7;
if( *(_DWORD *)(v15 + 28) )
{
if( !a3 )
{
v16 = 98i64;
goto LABEL_9;
}
}
else if( !a2 )
{
v16 = 93i64;
LABEL_9:
v17 = -1073741788;
LABEL_10:
TtmiLogError((PSTR)"TtmpAcquireSessionFromTerminalHandle", v16, 0xFFFFFFFFi64, v17);
return v17;
}
v18 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v18 + 242);
ExAcquireResourceExclusiveLite(&TtmpSessionLock, 1u);
v19 = *(_QWORD *)(v15 + 16);
if( (*(_DWORD *)(v19 + 4) & 4) != 0 )
{
ExReleaseResourceLite(&TtmpSessionLock);
KeLeaveCriticalRegion();
v16 = 105i64;
v17 = -1073740715;
goto LABEL_10;
}
*a4 = v19;
return 0i64;
}Referenced by:
TtmpDispatchAssignDevice
TtmpDispatchCreateEventQueue
TtmpDispatchCreateTerminal
TtmpDispatchEvacuateDevices
TtmpDispatchSetDefaultDeviceAssignment
TtmpDispatchSetDisplayPowerRequest
TtmpDispatchSetDisplayState
TtmpDispatchSetDisplayTimeouts
TtmpDispatchSetInputWakeCapability