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