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