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