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.