SepDeleteLogonSessionTrack

INT64 __stdcall SepDeleteLogonSessionTrack(LUID *LogonId, UINT8 MarkForInteractiveLogoff){
  _DEVICE_MAP *v2; 
  __int64 v5; 
  _DWORD **v6; 
  _ETHREAD *CurrentThread; 
  struct _ERESOURCE *v8; 
  _DWORD *i; 
  __int64 v10; 
  _DEVICE_MAP *v11; 
  void *v12; 
  void *v13; 
  unsigned int v15; 
  v2 = 0i64;
  v5 = (1529154084 * LogonId->LowPart) >> 28;
  v6 = (_DWORD **)(SepLogonSessions + 8 * v5);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v8 = &SepRmDbLock + (v5 & 3);
  ExAcquireResourceExclusiveLite(v8, 1u);
  for( i = *v6; ; i = *(_DWORD **)i )
  {
    if( !i )
    {
      v15 = -1073741729;
      goto LABEL_26;
    }
    if( *((_EJOB **)i + 20) == PsGetCurrentServerSilo() && LogonId->LowPart == i[2] && LogonId->HighPart == i[3] )
      break;
    v6 = (_DWORD **)i;
  }
  if( MarkForInteractiveLogoff )
  {
    i[8] |= 0x10u;
    ObRevokeHandles((_OB_HANDLE_REVOCATION_BLOCK *)i + 4);
    ExReleaseResourceLite(v8);
    KeLeaveCriticalRegion();
    return 0i64;
  }
  v10 = *((_QWORD *)i + 3);
  if( !v10 || (i[8] & 8) == 0 && v10 == 1 )
  {
    *v6 = *(_DWORD **)i;
    v11 = (_DEVICE_MAP *)*((_QWORD *)i + 5);
    if( v11 )
    {
      *((_QWORD *)i + 5) = 0i64;
      v2 = v11;
    }
    ExReleaseResourceLite(v8);
    KeLeaveCriticalRegion();
    if( v2 )
    {
      SepCleanupLUIDDeviceMapDirectory(LogonId, *((_EJOB **)i + 20));
      ObfDereferenceDeviceMap(v2);
    }
    v12 = (void *)*((_QWORD *)i + 20);
    if( v12 )
      ObfDereferenceObjectWithTag(v12, 0x734C6553ui64);
    v13 = (void *)*((_QWORD *)i + 8);
    if( v13 )
      ExFreePoolWithTag(v13, 0);
    SepDeleteLogonSessionClaims((INT64)i);
    if( SepTokenSidSharingEnabled )
      SepDeleteLogonSessionSidValues((INT64)i);
    ObDestroyHandleRevocationBlock((_OB_HANDLE_REVOCATION_BLOCK *)i + 4);
    ExFreePoolWithTag(i, 0);
    SepDeleteSessionLowboxEntries();
    return 0i64;
  }
  v15 = -1073741564;
LABEL_26:
  ExReleaseResourceLite(v8);
  KeLeaveCriticalRegion();
  return v15;
}

Referenced by:

SeInitServerSilo
SepDeleteUnreferencedLogonSessionsInSilo
SepRmDeleteLogonSessionWrkr
SepRmInteractiveLogoffLogonSessionWrkr