SeCaptureSubjectContextEx

VOID *__stdcall SeCaptureSubjectContextEx(PETHREAD Thread, PEPROCESS Process, PSECURITY_SUBJECT_CONTEXT SubjectContext){
  void *v6; 
  _EX_FAST_REF *p_Token; 
  VOID *result; 
  _QWORD *v9; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v11; 
  _EX_PUSH_LOCK *p_ProcessLock; 

  SubjectContext->ProcessAuditId = Process->UniqueProcessId;
  if( Thread )
  {
    if( (Thread->CrossThreadFlags & 8) != 0 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      ExAcquirePushLockSharedEx(&Thread->ThreadLock, 0i64);
      if( (Thread->CrossThreadFlags & 8) != 0 )
      {
        v6 = (void *)(Thread->ClientSecurity.ImpersonationData & 0xFFFFFFFFFFFFFFF8ui64);
        ObfReferenceObject(v6);
        SubjectContext->ImpersonationLevel = Thread->ClientSecurity.ImpersonationData & 3;
      }
      else
      {
        v6 = 0i64;
      }
      if( _InterlockedCompareExchange64(&Thread->ThreadLock._bf_0, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared(&Thread->ThreadLock);
      KeAbPostRelease(&Thread->ThreadLock);
      KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
    }
    else
    {
      v6 = 0i64;
    }
  }
  else
  {
    v6 = 0i64;
  }
  SubjectContext->ClientToken = v6;
  p_Token = &Process->Token;
  result = ObFastReferenceObject(&Process->Token);
  v9 = result;
  if( !result )
  {
    v11 = (_ETHREAD *)KeGetCurrentThread();
    --v11->Tcb.KernelApcDisable;
    p_ProcessLock = &Process->ProcessLock;
    ExAcquirePushLockSharedEx(p_ProcessLock, 0i64);
    v9 = ObFastReferenceObjectLocked(p_Token);
    if( _InterlockedCompareExchange64(&p_ProcessLock->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(p_ProcessLock);
    KeAbPostRelease(p_ProcessLock);
    KeLeaveCriticalRegionThread(&v11->Tcb);
  }
  SubjectContext->PrimaryToken = v9;
  if( SeTokenLeakTracking )
  {
    if( v9 )
    {
      _InterlockedIncrement((volatile signed __int32 *)(v9[143] + 284i64));
      if( SubjectContext->PrimaryToken == (void *)SepTokenLeakToken )
        __debugbreak();
    }
    result = SubjectContext->ClientToken;
    if( SubjectContext->ClientToken )
    {
      _InterlockedIncrement((volatile signed __int32 *)(*((_QWORD *)result + 143) + 284i64));
      result = (VOID *)SepTokenLeakToken;
      if( SubjectContext->ClientToken == (void *)SepTokenLeakToken )
        __debugbreak();
    }
  }
  return result;
}

Referenced by:

AlpcpCheckConnectionSecurity
CmQueryKey
CmQueryLayeredKey
CmpIsSystemEntity
CmpVEExecuteParseLogic
EtwpCheckProviderLoggingAccess
ExCpuSetResourceManagerAccessCheck
ExpCheckWakeTimerAccess
IopXxxControlFile
NtDuplicateToken
NtSetInformationFile
NtSetInformationJobObject
NtSetInformationProcess
ObInsertObjectEx
ObpCaptureBoundaryDescriptor
ObpVerifyCreatorAccessCheck
PsOpenProcess
SeCreateAccessStateEx
VfUtilIsLocalSystem