PsReferenceEffectiveToken

VOID *__stdcall PsReferenceEffectiveToken(
        _ETHREAD *Thread,
        _TOKEN_TYPE *TokenType,
        UINT8 *EffectiveOnly,
        _SECURITY_IMPERSONATION_LEVEL *ImpersonationLevel,
        PS_PROTECTION *ProcessProtection){
  _ETHREAD *CurrentThread; 
  _EPROCESS *Process; 
  void *v11; 
  VOID *v12; 
  _EX_PUSH_LOCK *Lock; 
  _KTHREAD *Threada; 
  _EPROCESS *v16; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( Thread == CurrentThread )
    Process = CurrentThread->Tcb.ApcState.Process;
  else
    Process = Thread->Tcb.Process;
  v11 = 0i64;
  if( (Thread->CrossThreadFlags & 8) == 0 )
    goto LABEL_4;
  v16 = Thread->Tcb.Process;
  Threada = (_ETHREAD *)KeGetCurrentThread();
  --Threada->Tcb.KernelApcDisable;
  Lock = &Thread->ThreadLock;
  ExAcquirePushLockSharedEx(&Thread->ThreadLock, 0i64);
  if( (Thread->CrossThreadFlags & 8) != 0 )
  {
    v11 = (void *)(Thread->ClientSecurity.ImpersonationData & 0xFFFFFFFFFFFFFFF8ui64);
    ObfReferenceObject(v11);
    *ImpersonationLevel = Thread->ClientSecurity.ImpersonationData & 3;
    *EffectiveOnly = (Thread->ClientSecurity._bf_0 & 4) != 0;
    if( ProcessProtection )
      ProcessProtection->Level = (unsigned __int8)v16->Protection;
  }
  if( _InterlockedCompareExchange64(&Lock->_bf_0, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(Lock);
  KeAbPostRelease(Lock);
  KeLeaveCriticalRegionThread(&Threada->Tcb);
  if( v11 )
  {
    *TokenType = TokenImpersonation;
    return v11;
  }
  else
  {
LABEL_4:
    v12 = ObFastReferenceObject(&Process->Token);
    if( !v12 )
    {
      --CurrentThread->Tcb.KernelApcDisable;
      ExAcquirePushLockSharedEx(&Process->ProcessLock, 0i64);
      v12 = ObFastReferenceObjectLocked(&Process->Token);
      if( _InterlockedCompareExchange64(&Process->ProcessLock._bf_0, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared(&Process->ProcessLock);
      KeAbPostRelease(&Process->ProcessLock);
      KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
    }
    *TokenType = TokenPrimary;
    *EffectiveOnly = 0;
    if( ProcessProtection )
      ProcessProtection->Level = (unsigned __int8)Process->Protection;
    return v12;
  }
}

Referenced by:

EtwpGetSidExtendedHeaderItem
ExpWnfQueryCurrentUserSID
MiIsUserQueryVmCallerTrusted
PspAllocateAndQueryNotificationChannel
RtlpAllowsLowBoxAccess
RtlpQueryLowBoxId
SeCaptureAtomTableCallout
SeLogAccessFailure
SeSubProcessToken
SepReferenceTokenUsingPseudoHandle
SepVerifyDesktopAppPolicyOverrideCaller