SeSetSecurityAttributesTokenEx

INT64 __fastcall SeSetSecurityAttributesTokenEx(
        VOID *a1,
        KPROCESSOR_MODE a2,
        INT64 r8_0,
        CHAR r9_0,
        INT64 *a5,
        INT64 a6,
        BYTE *a7){
  int v7; 
  _ETHREAD *CurrentThread; 
  PERESOURCE *v9; 
  _QWORD *v10; 
  int ProcUniqueLuidAndIndexFromToken; 
  __int64 v12; 
  int *v13; 
  INT64 *v14; 
  signed __int32 v16[8]; 
  PVOID Object; 
  UINT64 a4[2]; 
  UINT64 a3; 
  a4[0] = 0i64;
  LODWORD(a3) = 0;
  if( r8_0 )
    return(unsigned int)-1073741811;
  if( !r9_0 || (SepTokenSingletonAttributesConfig & 3) != 3 )
  {
    v14 = a5;
    *a7 = 0;
    return(unsigned int)SepInternalSetSecurityAttributesToken(a1, a2, 1, v14, a6);
  }
  if( a2 )
    return(unsigned int)-1073741790;
  Object = 0i64;
  v7 = ObReferenceObjectByHandle(a1, 0x80u, (POBJECT_TYPE)SeTokenObjectType, 0, &Object, 0i64);
  if( v7 >= 0 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)CurrentThread + 242);
    v9 = (PERESOURCE *)Object;
    ExAcquireResourceExclusiveLite(*((ERESOURCE **)Object + 6), 1u);
    _InterlockedOr(v16, 0);
    v10 = Object;
    ProcUniqueLuidAndIndexFromToken = SepGetProcUniqueLuidAndIndexFromTokenEx(1, (INT64)Object, &a3, a4);
    v12 = a6;
    v13 = (int *)a5;
    if( ProcUniqueLuidAndIndexFromToken >= 0 )
    {
      v7 = SepSetSingletonEntry((unsigned int)a3, a5, a6);
      if( v7 >= 0 )
      {
        *a7 = 1;
LABEL_13:
        v10[7] = ExpLuidIncrement + _InterlockedExchangeAdd64(&ExpLuid, ExpLuidIncrement);
      }
    }
    else
    {
      *a7 = 0;
      v7 = AuthzBasepSetSecurityAttributesToken((_DWORD *)v10[97], v13, v12);
      if( v7 >= 0 )
        goto LABEL_13;
    }
    _InterlockedOr(v16, 0);
    ExReleaseResourceLite(v9[6]);
    KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  }
  if( Object )
    ObfDereferenceObjectWithTag(Object, 0x746C6644ui64);
  return(unsigned int)v7;
}

Referenced by:

No references.