SeCaptureSubjectContextEx

VOID __stdcall SeCaptureSubjectContextEx(
        _ETHREAD *Thread,
        _EPROCESS *Process,
        _SECURITY_SUBJECT_CONTEXT *SubjectContext){
  void *v6; 
  _EX_FAST_REF *v7; 
  _QWORD *v8; 
  _ETHREAD *CurrentThread; 
  _ETHREAD *v10; 
  INT64 *v11; 
  SubjectContext->ProcessAuditId = (void *)*((_QWORD *)Process + 136);
  if( Thread )
  {
    if( (*((_DWORD *)Thread + 324) & 8) != 0 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)CurrentThread + 242);
      ExAcquirePushLockSharedEx((UINT64)Thread + 1280, 0i64);
      if( (*((_DWORD *)Thread + 324) & 8) != 0 )
      {
        v6 = (void *)(*((_QWORD *)Thread + 149) & 0xFFFFFFFFFFFFFFF8ui64);
        ObfReferenceObject(v6);
        SubjectContext->ImpersonationLevel = *((_DWORD *)Thread + 298) & 3;
      }
      else
      {
        v6 = 0i64;
      }
      if( _InterlockedCompareExchange64((volatile signed __int64 *)Thread + 160, 0i64, 17i64) != 17 )
        ExfReleasePushLockShared((INT64 *)Thread + 160);
      KeAbPostRelease((char *)Thread + 1280);
      KeLeaveCriticalRegionThread((__int64)CurrentThread);
    }
    else
    {
      v6 = 0i64;
    }
  }
  else
  {
    v6 = 0i64;
  }
  SubjectContext->ClientToken = v6;
  v7 = (_EX_FAST_REF *)((char *)Process + 1208);
  v8 = ObFastReferenceObject((INT64 *)Process + 151);
  if( !v8 )
  {
    v10 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v10 + 242);
    v11 = (INT64 *)((char *)Process + 1080);
    ExAcquirePushLockSharedEx((UINT64)v11, 0i64);
    v8 = (_QWORD *)ObFastReferenceObjectLocked(v7);
    if( _InterlockedCompareExchange64(v11, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(v11);
    KeAbPostRelease(v11);
    KeLeaveCriticalRegionThread((__int64)v10);
  }
  SubjectContext->PrimaryToken = v8;
  if( SeTokenLeakTracking )
  {
    if( v8 )
    {
      _InterlockedIncrement((volatile signed __int32 *)(v8[143] + 284i64));
      if( SubjectContext->PrimaryToken == (void *)SepTokenLeakToken )
        __debugbreak();
    }
    if( SubjectContext->ClientToken )
    {
      _InterlockedIncrement((volatile signed __int32 *)(*((_QWORD *)SubjectContext->ClientToken + 143) + 284i64));
      if( SubjectContext->ClientToken == (void *)SepTokenLeakToken )
        __debugbreak();
    }
  }
}

Referenced by:

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