SepInternalSetSecurityAttributesToken

INT64 __fastcall SepInternalSetSecurityAttributesToken(VOID *a1, KPROCESSOR_MODE a2, CHAR a3, INT64 *a4, INT64 a5){
  char v7; 
  int v8; 
  _ETHREAD *CurrentThread; 
  PERESOURCE *v10; 
  int *v11; 
  _DWORD *v12; 
  signed __int32 v14[12]; 
  PVOID Object; 
  Object = 0i64;
  v7 = 0;
  v8 = ObReferenceObjectByHandle(a1, 0x80u, (POBJECT_TYPE)SeTokenObjectType, a2, &Object, 0i64);
  if( v8 >= 0 )
  {
    if( a4 )
    {
      if( a3 || SepShouldSetDelinkFlags(a4, a5) )
        v7 = 1;
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --*((_WORD *)CurrentThread + 242);
      v10 = (PERESOURCE *)Object;
      ExAcquireResourceExclusiveLite(*((ERESOURCE **)Object + 6), 1u);
      _InterlockedOr(v14, 0);
      v11 = (int *)a4;
      v12 = Object;
      v8 = AuthzBasepSetSecurityAttributesToken(*((_DWORD **)Object + 97), v11, a5);
      if( v8 >= 0 )
      {
        if( v7 )
          v12[50] |= 0x20000u;
        *((_QWORD *)v12 + 7) = ExpLuidIncrement + _InterlockedExchangeAdd64(&ExpLuid, ExpLuidIncrement);
      }
      _InterlockedOr(v14, 0);
      ExReleaseResourceLite(v10[6]);
      KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
    }
    else
    {
      v8 = -1073741811;
    }
  }
  if( Object )
    ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
  return(unsigned int)v8;
}

Referenced by:

SeSetSecurityAttributesToken
SeSetSecurityAttributesTokenEx