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.