SepSetServerSiloToken

INT64 __fastcall SepSetServerSiloToken(VOID *InToken, _EJOB *DestServerSilo){
  _ETHREAD *CurrentThread; 
  int v5; 
  signed __int32 v7[10]; 
  _SEP_LOGON_SESSION_REFERENCES *ReturnSession; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  ReturnSession = 0i64;
  --*((_WORD *)CurrentThread + 242);
  ExAcquireResourceExclusiveLite(*((ERESOURCE **)InToken + 6), 1u);
  _InterlockedOr(v7, 0);
  if( (*((_DWORD *)InToken + 50) & 0x20) != 0 )
  {
    v5 = -1073741816;
  }
  else
  {
    v5 = SepReferenceLogonSessionSilo((_LUID *)InToken + 3, DestServerSilo, &ReturnSession);
    if( v5 < 0 )
      goto LABEL_10;
    if( SeTokenLeakTracking )
      SepRemoveTokenLogonSession((INT64)InToken);
    SepDeReferenceLogonSessionDirect(*((_QWORD **)InToken + 27));
    *((_QWORD *)InToken + 27) = ReturnSession;
    if( SeTokenLeakTracking )
      SepAddTokenLogonSession((INT64)InToken);
  }
  if( v5 >= 0 )
    *((_QWORD *)InToken + 7) = ExpLuidIncrement + _InterlockedExchangeAdd64(&ExpLuid, ExpLuidIncrement);
LABEL_10:
  _InterlockedOr(v7, 0);
  ExReleaseResourceLite(*((PERESOURCE *)InToken + 6));
  KeLeaveCriticalRegion();
  return(unsigned int)v5;
}

Referenced by:

SepCopyAnonymousTokenAndSetSilo
SepCopyClientTokenAndSetSilo