SepRemoveTokenLogonSession
VOID __stdcall SepRemoveTokenLogonSession(_TOKEN *Token){
INT64 v1;
_ETHREAD *CurrentThread;
unsigned int v4;
__int64 v5;
_ERESOURCE *v6;
__int64 *v7;
_TOKEN **v8;
_TOKEN *v9;
void **v10;
if( (Token->TokenFlags & 0x20) == 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v4 = (1529154084 * Token->AuthenticationId.LowPart) >> 28;
--CurrentThread->Tcb.KernelApcDisable;
v5 = v4;
v6 = &stru_140CEC5A0 + (v4 & 3);
ExAcquireResourceExclusiveLite((UINT64)v6, 1, v1);
v7 = *(__int64 **)(SepLogonSessions + 8 * v5);
if( v7 )
{
while( 1 )
{
if( Token->AuthenticationId.LowPart == *((_DWORD *)v7 + 2)
&& Token->AuthenticationId.HighPart == *((_DWORD *)v7 + 3)
&& Token->LogonSession->ServerSilo == (_EJOB *)v7[20] )
{
v8 = (_TOKEN **)v7[22];
if( v8 != (_TOKEN **)(v7 + 22) )
break;
}
LABEL_9:
v7 = (__int64 *)*v7;
if( !v7 )
goto LABEL_10;
}
while( 1 )
{
v9 = *v8;
if( v8[2] == Token )
break;
v8 = (_TOKEN **)*v8;
if( v9 == (_TOKEN *)(v7 + 22) )
goto LABEL_9;
}
if( (_TOKEN **)v9->TokenSource.SourceIdentifier != v8 || (v10 = (void **)v8[1], *v10 != v8) )
__fastfail(3u);
*v10 = v9;
v9->TokenSource.SourceIdentifier = (_LUID)v10;
ExReleaseResourceLite(v6);
KeLeaveCriticalRegion();
ExFreePoolWithTag(v8, 0);
}
else
{
LABEL_10:
ExReleaseResourceLite(v6);
KeLeaveCriticalRegion();
}
}
}Referenced by:
NtSetInformationToken
SepLinkLogonSessions
SepSetServerSiloToken
SepTokenDeleteMethod