SepDeReferenceLogonSession
VOID __stdcall SepDeReferenceLogonSession(_LUID *LogonId, VOID *ServerSilo){
__int64 v4;
_SEP_LOGON_SESSION_REFERENCES **p_Next;
_ETHREAD *CurrentThread;
INT64 v7;
_ERESOURCE *v8;
_SEP_LOGON_SESSION_REFERENCES *i;
__int64 v10;
_ADAPTER_OBJECT *Token;
_DEVICE_MAP *pDeviceMap;
wchar_t *Buffer;
v4 = (1529154084 * LogonId->LowPart) >> 28;
p_Next = (_SEP_LOGON_SESSION_REFERENCES **)(SepLogonSessions + 8 * v4);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v7 = v4 & 3;
v8 = &stru_140CEC5A0 + v7;
ExAcquireResourceExclusiveLite((UINT64)v8, 1, v7);
for( i = *p_Next; ; i = i->Next )
{
if( !i )
{
ExReleaseResourceLite(v8);
KeLeaveCriticalRegion();
KeBugCheckEx(0x46u, 0i64, 0i64, 0i64, 0i64);
}
if( i->ServerSilo == ServerSilo
&& LogonId->LowPart == i->LogonId.LowPart
&& LogonId->HighPart == i->LogonId.HighPart )
{
break;
}
p_Next = &i->Next;
}
v10 = _InterlockedDecrement64(&i->ReferenceCount);
if( v10 > 0 )
{
ExReleaseResourceLite(v8);
KeLeaveCriticalRegion();
}
else
{
if( v10 )
__fastfail(0xEu);
*p_Next = i->Next;
ExReleaseResourceLite(v8);
KeLeaveCriticalRegion();
if( (i->Flags & 4) != 0 && (i->BuddyLogonId.LowPart || i->BuddyLogonId.HighPart) )
SepDeReferenceLogonSession(&i->BuddyLogonId, i->ServerSilo);
Token = (_ADAPTER_OBJECT *)i->Token;
if( Token )
{
HalPutDmaAdapter(Token);
i->Token = 0i64;
}
pDeviceMap = i->pDeviceMap;
if( pDeviceMap )
{
i->pDeviceMap = 0i64;
SepCleanupLUIDDeviceMapDirectory(LogonId, (_EJOB *)ServerSilo);
ObfDereferenceDeviceMap(pDeviceMap);
}
if( (i->Flags & 1) != 0 )
SepInformFileSystemsOfDeletedLogon(LogonId, ServerSilo);
Buffer = i->AccountName.Buffer;
if( Buffer )
ExFreePoolWithTag(Buffer, 0);
SepDeleteLogonSessionClaims(i);
if( SepTokenSidSharingEnabled )
SepDeleteLogonSessionSidValues(i);
ObDestroyHandleRevocationBlock(&i->RevocationBlock);
SepInformLsaOfDeletedLogon(LogonId, i->ServerSilo, (_SEP_LSA_WORK_ITEM *)i);
SepDeleteSessionLowboxEntries();
}
}Referenced by:
SepDeReferenceLogonSession
SepDeReferenceLogonSessionDirect
SepTokenDeleteMethod