SeSetSessionIdTokenWithLinked

NTSTATUS __stdcall SeSetSessionIdTokenWithLinked(VOID *a1, UINT64 a2){
  unsigned int v2; 
  void *v3; 
  int v4; 
  _ETHREAD *CurrentThread; 
  VOID *v6; 
  __int64 v7; 
  void *v8; 
  _SEP_LOGON_SESSION_REFERENCES *ReturnSession; 
  _SEP_LOGON_SESSION_REFERENCES *LogonSession; 
  _LUID LogonId; 
  VOID *TrustLevelSid; 
  UINT8 UseNewTrust; 
  VOID *Token; 

  Token = 0i64;
  v2 = a2;
  ReturnSession = 0i64;
  v3 = 0i64;
  LogonSession = 0i64;
  v4 = SepReferenceTokenByHandle(
         a1,
         8ui64,
         KeGetCurrentThread()->PreviousMode,
         (_TOKEN **)&Token,
         &UseNewTrust,
         &TrustLevelSid);
  if( v4 < 0 )
  {
    v6 = Token;
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    v6 = Token;
    ExAcquireResourceSharedLite(*((_QWORD *)Token + 6), 1);
    if( *((_BYTE *)v6 + 204) )
    {
      v4 = -1073741525;
      goto LABEL_13;
    }
    v4 = SepReferenceLogonSessionSilo(
           (_LUID *)(*((_QWORD *)v6 + 27) + 8i64),
           *(_EJOB **)(*((_QWORD *)v6 + 27) + 160i64),
           &ReturnSession);
    if( v4 >= 0 )
    {
      v7 = *((_QWORD *)v6 + 27);
      v8 = ReturnSession->Token;
      LogonId = *(_LUID *)(v7 + 16);
      if( LogonId )
      {
        v4 = SepReferenceLogonSessionSilo(&LogonId, *(_EJOB **)(v7 + 160), &LogonSession);
        if( v4 < 0 )
          goto LABEL_13;
        v3 = LogonSession->Token;
      }
      if( !v8 || (v4 = SeSetSessionIdToken(v8, v2), v4 >= 0) )
      {
        if( v3 )
          v4 = SeSetSessionIdToken(v3, v2);
      }
    }
  }
LABEL_13:
  if( v6 )
  {
    ExReleaseResourceLite(*((PERESOURCE *)v6 + 6));
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    HalPutDmaAdapter((PADAPTER_OBJECT)Token);
  }
  if( ReturnSession )
    SepDeReferenceLogonSessionDirect(ReturnSession);
  if( LogonSession )
    SepDeReferenceLogonSessionDirect(LogonSession);
  return v4;
}

Referenced by:

No references.