TtmpSessionWorker
VOID __stdcall TtmpSessionWorker(VOID *Parameter){
INT64 v1;
char v3;
_ETHREAD *CurrentThread;
void *v5;
unsigned int v6;
unsigned int v7;
void *SessionById;
unsigned int v9;
INT64 v10;
INT64 v11;
UINT64 v12;
NTSTATUS v13;
unsigned int i;
unsigned int v15;
unsigned int v16;
unsigned int v17;
char v18;
unsigned int v19;
int v20;
int v21;
UINT8 RunSessionWorker;
char RunDeviceWorker[7];
_KAPC_STATE ApcState;
memset(&ApcState, 0, sizeof(ApcState));
RunDeviceWorker[0] = 0;
v3 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = 0i64;
RunSessionWorker = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&TtmpSessionLock, 1, v1);
v6 = *(_DWORD *)Parameter;
TtmiLogSessionWorkerStart(*(unsigned int *)Parameter);
v7 = *((_DWORD *)Parameter + 1) & 0xFFFFFFFC | 2;
*((_DWORD *)Parameter + 1) = v7;
*((_QWORD *)Parameter + 29) = KeGetCurrentThread();
if( (v7 & 4) == 0 )
{
SessionById = MmGetSessionById(v6);
v5 = SessionById;
if( !SessionById )
{
v9 = -1073740715;
v10 = 0xFFFFFFFFi64;
v11 = 3221226581i64;
v12 = 2914i64;
LABEL_4:
TtmiLogError((INT8 *)"TtmpSessionWorker", v12, v10, v11);
goto LABEL_25;
}
v13 = MmAttachSession(SessionById, &ApcState);
v9 = v13;
if( v13 < 0 )
{
v11 = (unsigned int)v13;
v10 = (unsigned int)v13;
v12 = 2923i64;
goto LABEL_4;
}
v3 = 1;
}
v9 = 0;
for( i = 1; ; ++i )
{
v21 = *((_DWORD *)Parameter + 56);
*((_DWORD *)Parameter + 56) = 0;
v16 = v21 & 7;
if( !v16 )
break;
TtmiLogSessionWorkerPass(v6, v16, i);
if( (v16 & 2) != 0 )
{
TtmiSessionTerminalListWorker((_TTMI_SESSION *)Parameter, &RunSessionWorker, (UINT8 *)RunDeviceWorker);
v15 = (v16 & 0xFD ^ (v16 & 0xFD | (unsigned __int8)(4 * RunSessionWorker))) & 4 ^ v16 & 0xFFFFFFFD;
v16 = ((unsigned __int8)v15 ^ (unsigned __int8)(v15 | RunDeviceWorker[0])) & 1 ^ v15;
}
v17 = v16;
v18 = v16 & 0xFB;
v19 = v17 >> 2;
if( (_BYTE)v19 )
{
if( (*((_DWORD *)Parameter + 1) & 0x10) != 0 )
{
v9 = TtmpActivateSessionWorker((_TTMI_SESSION *)Parameter);
if( v9 != 259 )
{
v20 = *((_DWORD *)Parameter + 1);
if( (v20 & 0x1000) != 0 )
{
v18 = 1;
*((_DWORD *)Parameter + 1) = v20 & 0xFFFFEFFF;
}
}
}
}
if( (v18 & 1) != 0 )
TtmiSessionDeviceListWorker((_TTMI_SESSION *)Parameter);
if( (_BYTE)v19 && (*((_DWORD *)Parameter + 1) & 0x20) != 0 )
v9 = TtmpDeactivateSessionWorker((_TTMI_SESSION *)Parameter);
}
if( v3 )
MmDetachSession(v5, &ApcState);
LABEL_25:
*((_DWORD *)Parameter + 1) &= ~2u;
*((_QWORD *)Parameter + 29) = 0i64;
ExReleaseResourceLite(&TtmpSessionLock);
KeLeaveCriticalRegion();
TtmpDereferenceSessionMaybeLast((_TTMI_SESSION *)Parameter);
TtmiLogSessionWorkerStop(v6, v9);
}Referenced by:
No references.