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