SepSetLogonSessionToken

VOID __stdcall SepSetLogonSessionToken(_TOKEN *Token){
  _SEP_LOGON_SESSION_REFERENCES *LogonSession; 
  unsigned int TokenFlags; 
  NTSTATUS v4; 
  _ADAPTER_OBJECT *v5; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  _TOKEN *Tokena; 

  LogonSession = Token->LogonSession;
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  if( !LogonSession->Token )
  {
    TokenFlags = Token->TokenFlags;
    if( (TokenFlags & 0x10) == 0 && (TokenFlags & 8) == 0 )
    {
      Tokena = 0i64;
      memset(&ObjectAttributes.RootDirectory, 0, 20);
      ObjectAttributes.Length = 48;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      if( SepDuplicateToken(Token, &ObjectAttributes, 0, TokenPrimary, SecurityAnonymous, 0, 0, &Tokena) >= 0 )
      {
        v4 = SepStopReferencingLogonSession(Tokena);
        v5 = (_ADAPTER_OBJECT *)Tokena;
        if( v4 < 0 )
        {
LABEL_9:
          HalPutDmaAdapter(v5);
          return;
        }
        if( _InterlockedCompareExchange64(
               (volatile signed __int64 *)&Token->LogonSession->Token,
               (signed __int64)Tokena,
               0i64) )
        {
          v5 = (_ADAPTER_OBJECT *)Tokena;
          goto LABEL_9;
        }
      }
    }
  }
}

Referenced by:

SepFilterToken