SepGetTokenSessionMapEntry

INT64 __fastcall SepGetTokenSessionMapEntry(INT64 a1, CHAR a2, CHAR **a3){
  __int64 **v4; 
  int v6; 
  __int64 *i; 
  CHAR *v9; 
  char *PoolWithTag; 
  __int64 v11; 
  __int64 v12; 
  *a3 = 0i64;
  v4 = (__int64 **)g_SessionLowboxMap;
  v6 = a1;
  if( g_SessionLowboxMap )
  {
LABEL_5:
    for( i = *v4; i != (__int64 *)v4; i = (__int64 *)*i )
    {
      if( *((_DWORD *)i + 4) == v6 )
      {
        v9 = (CHAR *)(i + 3);
LABEL_17:
        *a3 = v9;
        return 0i64;
      }
    }
    if( !a2 )
      return 3221226021i64;
    PoolWithTag = (char *)ExAllocatePoolWithTag(PagedPool, 0x40ui64, 0x734C6553ui64);
    if( PoolWithTag )
    {
      v11 = g_SessionLowboxMap;
      v9 = PoolWithTag + 24;
      *((_QWORD *)PoolWithTag + 3) = 0i64;
      PoolWithTag[56] = 0;
      *((_DWORD *)PoolWithTag + 4) = v6;
      v12 = *(_QWORD *)v11;
      if( *(_QWORD *)(*(_QWORD *)v11 + 8i64) != v11 )
        __fastfail(3u);
      *(_QWORD *)PoolWithTag = v12;
      *((_QWORD *)PoolWithTag + 1) = v11;
      *(_QWORD *)(v12 + 8) = PoolWithTag;
      *(_QWORD *)v11 = PoolWithTag;
      goto LABEL_17;
    }
    return 3221225626i64;
  }
  if( !a2 )
    return 3221226021i64;
  v4 = (__int64 **)ExAllocatePoolWithTag(
                     (_POOL_TYPE)(g_SessionLowboxMap + 1),
                     (unsigned int)(g_SessionLowboxMap + 16),
                     0x734C6553ui64);
  g_SessionLowboxMap = (__int64)v4;
  if( v4 )
  {
    v4[1] = (__int64 *)v4;
    *v4 = (__int64 *)v4;
    goto LABEL_5;
  }
  return 3221225626i64;
}

Referenced by:

SepDereferenceLowBoxNumberEntry
SepIsParentOfChildAppContainer
SepSetTokenLowboxNumber