SepSetTokenLowboxNumber

NTSTATUS __stdcall SepSetTokenLowboxNumber(_TOKEN *Token, VOID *PackageSid){
  __int64 SessionId; 
  VOID *v3; 
  char v5; 
  char v6; 
  int LowBoxNumberEntry; 
  _EX_PUSH_LOCK *v8; 
  _ETHREAD *v9; 
  _SEP_LOWBOX_NUMBER_MAPPING *v10; 
  _ETHREAD *CurrentThread; 
  _SEP_LOWBOX_NUMBER_MAPPING *v13; 
  _ETHREAD *v14; 
  NTSTATUS TokenSessionMapEntry; 
  _ETHREAD *v16; 
  _EX_PUSH_LOCK *PushLock; 
  VOID *v18; 
  _SEP_LOWBOX_NUMBER_ENTRY *MatchingEntry; 

  v18 = PackageSid;
  SessionId = Token->SessionId;
  PushLock = 0i64;
  MatchingEntry = 0i64;
  v3 = PackageSid;
  v5 = 0;
  v6 = 0;
  LowBoxNumberEntry = 0;
  if( (unsigned int)SessionId < 5 )
  {
    v8 = (_EX_PUSH_LOCK *)((char *)&unk_140C25C80 + 40 * SessionId);
    PushLock = v8;
LABEL_3:
    if( !LOBYTE(v8[4]._bf_0) )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      v13 = (_SEP_LOWBOX_NUMBER_MAPPING *)PushLock;
      ExAcquirePushLockExclusiveEx(PushLock, 0i64);
      if( !LOBYTE(v8[4]._bf_0) )
        LowBoxNumberEntry = SepInitializeLowBoxNumberTable(v13);
      if( (_InterlockedExchangeAdd64(&v13->Lock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(PushLock);
      KeAbPostRelease(PushLock);
      KeLeaveCriticalRegion();
      v3 = v18;
    }
    if( !LowBoxNumberEntry )
    {
      v9 = (_ETHREAD *)KeGetCurrentThread();
      --v9->Tcb.KernelApcDisable;
      v10 = (_SEP_LOWBOX_NUMBER_MAPPING *)PushLock;
      ExAcquirePushLockExclusiveEx(PushLock, 0i64);
      LowBoxNumberEntry = SepGetLowBoxNumberEntry(v10, v3, &MatchingEntry);
      if( !LowBoxNumberEntry )
        Token->LowboxNumberEntry = MatchingEntry;
      if( (_InterlockedExchangeAdd64(&v10->Lock._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
        ExfTryToWakePushLock(PushLock);
      KeAbPostRelease(PushLock);
      KeLeaveCriticalRegion();
    }
    goto LABEL_10;
  }
  v14 = (_ETHREAD *)KeGetCurrentThread();
  --v14->Tcb.KernelApcDisable;
  ExAcquirePushLockSharedEx(&stru_140C25D50, 0i64);
  v5 = 1;
  TokenSessionMapEntry = SepGetTokenSessionMapEntry(
                           (unsigned int)SessionId,
                           0,
                           (_SEP_LOWBOX_NUMBER_MAPPING **)&PushLock);
  LowBoxNumberEntry = TokenSessionMapEntry;
  if( TokenSessionMapEntry >= 0 )
    goto LABEL_24;
  if( TokenSessionMapEntry == -1073741275 )
  {
    if( _InterlockedCompareExchange64(&stru_140C25D50._bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(&stru_140C25D50);
    KeAbPostRelease(&stru_140C25D50);
    KeLeaveCriticalRegion();
    v16 = (_ETHREAD *)KeGetCurrentThread();
    --v16->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx(&stru_140C25D50, 0i64);
    v6 = 1;
    v5 = 0;
    LowBoxNumberEntry = SepGetTokenSessionMapEntry(
                          (unsigned int)SessionId,
                          1u,
                          (_SEP_LOWBOX_NUMBER_MAPPING **)&PushLock);
  }
  if( LowBoxNumberEntry >= 0 )
  {
LABEL_24:
    v8 = PushLock;
    goto LABEL_3;
  }
LABEL_10:
  if( v6 )
  {
    if( (_InterlockedExchangeAdd64(&stru_140C25D50._bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock(&stru_140C25D50);
    goto LABEL_29;
  }
  if( v5 )
  {
    if( _InterlockedCompareExchange64(&stru_140C25D50._bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(&stru_140C25D50);
LABEL_29:
    KeAbPostRelease(&stru_140C25D50);
    KeLeaveCriticalRegion();
  }
  return LowBoxNumberEntry;
}

Referenced by:

NtCreateLowBoxToken
SeExchangePrimaryToken
SeSetSessionIdToken
SeSubProcessToken
SepGetAnonymousToken