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