SepDeleteUnreferencedLogonSessionsInSilo
VOID __stdcall SepDeleteUnreferencedLogonSessionsInSilo(_EJOB *ServerSilo){
_EJOB *v2;
INT64 v3;
__int64 v4;
_EJOB *v5;
__int64 v6;
__int64 v7;
_ETHREAD *CurrentThread;
__int64 v9;
_ERESOURCE *v10;
__int64 i;
__int64 v12;
_ETHREAD *v13;
INT64 v14;
_LUID LogonId;
LODWORD(v2) = PsAttachSiloToCurrentThread((INT64)ServerSilo);
v4 = 0i64;
v5 = v2;
v6 = 0i64;
v7 = 16i64;
do
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v9 = SepLogonSessions;
--CurrentThread->Tcb.KernelApcDisable;
v10 = &stru_140CEC5A0 + (v4 & 3);
ExAcquireResourceExclusiveLite((UINT64)v10, 1, v3);
for( i = *(_QWORD *)(v6 + v9); i; i = *(_QWORD *)i )
{
if( *(_EJOB **)(i + 160) == ServerSilo )
{
v12 = *(_QWORD *)(i + 24);
if( !v12 || (*(_DWORD *)(i + 32) & 8) == 0 && v12 == 1 )
{
LogonId = *(_LUID *)(i + 8);
ExReleaseResourceLite(v10);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
SepDeleteLogonSessionTrack(&LogonId, 0);
v13 = (_ETHREAD *)KeGetCurrentThread();
--v13->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)v10, 1, v14);
i = SepLogonSessions + 8 * v4;
}
}
}
ExReleaseResourceLite(v10);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
++v4;
v6 += 8i64;
--v7;
}
while( v7 );
PsDetachSiloFromCurrentThread(v5);
}Referenced by:
SeShutdownServerSilo