SepReferenceLogonSessionSilo
NTSTATUS __stdcall SepReferenceLogonSessionSilo(
_LUID *LogonId,
_EJOB *ServerSilo,
_SEP_LOGON_SESSION_REFERENCES **ReturnSession){
__int64 v6;
_SEP_LOGON_SESSION_REFERENCES *v7;
_ETHREAD *CurrentThread;
_ERESOURCE *v9;
NTSTATUS result;
v6 = (1529154084 * LogonId->LowPart) >> 28;
v7 = (_SEP_LOGON_SESSION_REFERENCES *)(SepLogonSessions + 8 * v6);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v9 = &stru_140CEC5A0 + (v6 & 3);
ExAcquireResourceExclusiveLite((UINT64)v9, 1, (INT64)ReturnSession);
do
{
v7 = v7->Next;
if( !v7 )
{
ExReleaseResourceLite(v9);
KeLeaveCriticalRegion();
return -1073741729;
}
}
while( v7->ServerSilo != ServerSilo
|| LogonId->LowPart != v7->LogonId.LowPart
|| LogonId->HighPart != v7->LogonId.HighPart );
_m_prefetchw(&v7->Flags);
if( (_InterlockedOr((volatile signed __int32 *)&v7->Flags, 8u) & 8) != 0
&& _InterlockedIncrement64(&v7->ReferenceCount) <= 1 )
{
__fastfail(0xEu);
}
ExReleaseResourceLite(v9);
KeLeaveCriticalRegion();
result = 0;
*ReturnSession = v7;
return result;
}Referenced by:
NtQueryInformationToken
SeGetLinkedToken
SeInitServerSilo
SeSetSessionIdTokenWithLinked
SepReferenceLogonSession
SepSetServerSiloToken