SepDeleteUnreferencedLogonSessionsInSilo
VOID __stdcall SepDeleteUnreferencedLogonSessionsInSilo(PEJOB ServerSilo){
__int64 v2;
_EJOB *v3;
__int64 v4;
__int64 v5;
_ETHREAD *CurrentThread;
__int64 v7;
struct _ERESOURCE *v8;
__int64 i;
__int64 v10;
_ETHREAD *v11;
LUID LogonId;
v2 = 0i64;
v3 = PsAttachSiloToCurrentThread(ServerSilo);
v4 = 0i64;
v5 = 16i64;
do
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = SepLogonSessions;
--*((_WORD *)CurrentThread + 242);
v8 = &SepRmDbLock + (v2 & 3);
ExAcquireResourceExclusiveLite(v8, 1u);
for( i = *(_QWORD *)(v4 + v7); i; i = *(_QWORD *)i )
{
if( *(PEJOB *)(i + 160) == ServerSilo )
{
v10 = *(_QWORD *)(i + 24);
if( !v10 || (*(_DWORD *)(i + 32) & 8) == 0 && v10 == 1 )
{
LogonId = *(LUID *)(i + 8);
ExReleaseResourceLite(v8);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
SepDeleteLogonSessionTrack(&LogonId, 0);
v11 = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)v11 + 242);
ExAcquireResourceExclusiveLite(v8, 1u);
i = SepLogonSessions + 8 * v2;
}
}
}
ExReleaseResourceLite(v8);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
++v2;
v4 += 8i64;
--v5;
}
while( v5 );
PsDetachSiloFromCurrentThread(v3);
}Referenced by:
SeShutdownServerSilo