SepSetSingletonEntry

INT64 __fastcall SepSetSingletonEntry(UINT64 a1, INT64 *a2, INT64 a3){
  unsigned int v5; 
  volatile LONG *SingletonEntryFromIndexNumber; 
  INT64 *v7; 
  KIRQL v8; 
  _DWORD *v9; 
  unsigned __int64 v10; 
  _DWORD *PoolWithTag; 
  _QWORD *v12; 
  _QWORD *v13; 
  v5 = 0;
  SingletonEntryFromIndexNumber = (volatile LONG *)SepGetSingletonEntryFromIndexNumber(a1);
  v7 = (INT64 *)SingletonEntryFromIndexNumber;
  if( SingletonEntryFromIndexNumber )
  {
    v8 = ExAcquireSpinLockExclusive(SingletonEntryFromIndexNumber);
    v9 = (_DWORD *)v7[2];
    v10 = v8;
    if( !v9 )
    {
      PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x30ui64, 0x74416553ui64);
      v7[2] = (INT64)PoolWithTag;
      if( !PoolWithTag )
      {
        v5 = -1073741801;
LABEL_7:
        ExReleaseSpinLockExclusiveFromDpcLevel(v7);
        __writecr8(v10);
        return v5;
      }
      *PoolWithTag = 0;
      *(_DWORD *)(v7[2] + 24) = 0;
      v12 = (_QWORD *)(v7[2] + 8);
      v12[1] = v12;
      *v12 = v12;
      v13 = (_QWORD *)(v7[2] + 32);
      v13[1] = v13;
      *v13 = v13;
      v9 = (_DWORD *)v7[2];
    }
    v5 = AuthzBasepSetSecurityAttributesToken(v9, (int *)a2, a3);
    *((_DWORD *)SepSingletonGlobal + 4) |= 1u;
    goto LABEL_7;
  }
  return v5;
}

Referenced by:

SeSetSecurityAttributesTokenEx