SepSetServerSiloToken
NTSTATUS __stdcall SepSetServerSiloToken(VOID *InToken, _EJOB *DestServerSilo){
INT64 v2;
_ETHREAD *CurrentThread;
int v6;
signed __int32 v8[10];
_SEP_LOGON_SESSION_REFERENCES *ReturnSession;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
ReturnSession = 0i64;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite(*((_QWORD *)InToken + 6), 1, v2);
_InterlockedOr(v8, 0);
if( (*((_DWORD *)InToken + 50) & 0x20) != 0 )
{
v6 = -1073741816;
}
else
{
v6 = SepReferenceLogonSessionSilo((_LUID *)InToken + 3, DestServerSilo, &ReturnSession);
if( v6 < 0 )
goto LABEL_10;
if( SeTokenLeakTracking )
SepRemoveTokenLogonSession((_TOKEN *)InToken);
SepDeReferenceLogonSessionDirect(*((_SEP_LOGON_SESSION_REFERENCES **)InToken + 27));
*((_QWORD *)InToken + 27) = ReturnSession;
if( SeTokenLeakTracking )
SepAddTokenLogonSession((_TOKEN *)InToken);
}
if( v6 >= 0 )
*((_QWORD *)InToken + 7) = ExpLuidIncrement + _InterlockedExchangeAdd64(&ExpLuid, ExpLuidIncrement);
LABEL_10:
_InterlockedOr(v8, 0);
ExReleaseResourceLite(*((PERESOURCE *)InToken + 6));
KeLeaveCriticalRegion();
return v6;
}Referenced by:
SepCopyAnonymousTokenAndSetSilo
SepCopyClientTokenAndSetSilo