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.