SepAdtTokenRightAdjusted
void __fastcall SepAdtTokenRightAdjusted(
_TOKEN *Token,
_LUID_AND_ATTRIBUTES *DisabledPrivileges,
UINT64 DisabledCount,
_LUID_AND_ATTRIBUTES *EnabledPrivileges,
UINT64 EnabledCount,
INT64 AccessGranted){
unsigned int v6;
int *v9;
int *v10;
void *ClientToken;
void *PrimaryToken;
__int64 CurrentThreadProcess;
_QWORD *v14;
void *v15;
ULONG_PTR v16;
ULONG_PTR AuthenticationId;
int *PoolWithTag;
signed __int64 v19;
__int64 v20;
int *v21;
signed __int64 v22;
__int64 v23;
int v24;
ULONG v25;
int v26;
ULONG v27;
int v28;
ULONG v29;
unsigned int v30;
PVOID P;
_TOKEN *v32;
unsigned __int8 *v33;
ULONG_PTR v34;
struct _SECURITY_SUBJECT_CONTEXT SubjectContext;
_SE_ADT_PARAMETER_ARRAY Src;
P = 0i64;
v6 = DisabledCount;
v32 = Token;
v30 = DisabledCount;
memset(&SubjectContext, 0, sizeof(SubjectContext));
v9 = 0i64;
v10 = 0i64;
SeCaptureSubjectContext(&SubjectContext);
ClientToken = SubjectContext.ClientToken;
PrimaryToken = SubjectContext.PrimaryToken;
if( SubjectContext.ClientToken )
PrimaryToken = SubjectContext.ClientToken;
if( (unsigned __int8)SeAuditingWithTokenForSubcategory(0x8Aui64, PrimaryToken)
&& (SepAdtAuditablePrivilege(DisabledPrivileges, v6)
|| SepAdtAuditablePrivilege(EnabledPrivileges, (unsigned int)EnabledCount)) )
{
memset((INT64)&Src, 0i64);
Src.CategoryId = 5;
Src.FlatSubCategoryId = 138;
Src.AuditId = 4703;
Src.Type = 8;
if( !(_BYTE)AccessGranted )
Src.Type = 16;
CurrentThreadProcess = PsGetCurrentThreadProcess();
if( *(_QWORD *)(CurrentThreadProcess + 1472) )
{
v34 = *(_QWORD *)(CurrentThreadProcess + 1088);
if( (int)PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &P) >= 0 )
{
v14 = SubjectContext.PrimaryToken;
v15 = SubjectContext.PrimaryToken;
if( ClientToken )
v15 = ClientToken;
if( ClientToken )
v14 = ClientToken;
v16 = v14[3];
AuthenticationId = (ULONG_PTR)v32->AuthenticationId;
v33 = (unsigned __int8 *)**((_QWORD **)v15 + 19);
if( (_DWORD)EnabledCount )
{
PoolWithTag = (int *)ExAllocatePoolWithTag(
PagedPool,
(unsigned int)(12 * EnabledCount) + 20i64,
0x70416553ui64);
v9 = PoolWithTag;
if( !PoolWithTag )
goto LABEL_4;
PoolWithTag[1] = 1;
v19 = (char *)PoolWithTag - (char *)EnabledPrivileges;
*PoolWithTag = EnabledCount;
v20 = (unsigned int)EnabledCount;
do
{
*(_LUID *)((char *)&EnabledPrivileges->Attributes + v19) = EnabledPrivileges->Luid;
*(int *)((char *)&EnabledPrivileges[1].Luid.HighPart + v19) = EnabledPrivileges->Attributes;
++EnabledPrivileges;
--v20;
}
while( v20 );
}
if( v30 )
{
v21 = (int *)ExAllocatePoolWithTag(PagedPool, 12 * v30 + 20i64, 0x70416553ui64);
v10 = v21;
if( !v21 )
goto LABEL_4;
v21[1] = 1;
v22 = (char *)v21 - (char *)DisabledPrivileges;
*v21 = v30;
v23 = v30;
do
{
*(_LUID *)((char *)&DisabledPrivileges->Attributes + v22) = DisabledPrivileges->Luid;
*(int *)((char *)&DisabledPrivileges[1].Luid.HighPart + v22) = DisabledPrivileges->Attributes;
++DisabledPrivileges;
--v23;
}
while( v23 );
}
Src.Parameters[0].Address = v33;
Src.Parameters[0].Type = SeAdtParmTypeSid;
Src.Parameters[1].Type = SeAdtParmTypeString;
v24 = v33[1];
Src.Parameters[1].Length = 32;
Src.Parameters[2].Type = SeAdtParmTypeLogonId;
Src.Parameters[2].Length = 8;
Src.Parameters[0].Length = 4 * v24 + 8;
Src.Parameters[1].Address = &SeSubsystemName;
v25 = *(unsigned __int16 *)P + 16;
Src.Parameters[2].Data[0] = v16;
Src.Parameters[4].Length = v25;
Src.Parameters[5].Data[0] = v34;
Src.Parameters[3].Type = SeAdtParmTypeLogonIdEx;
Src.Parameters[3].Length = 8;
Src.Parameters[3].Data[0] = AuthenticationId;
Src.Parameters[4].Type = SeAdtParmTypeFileSpec;
Src.Parameters[4].Address = P;
Src.Parameters[5].Type = SeAdtParmTypePtr;
Src.Parameters[5].Length = 8;
if( v9 )
{
v26 = *v9;
Src.Parameters[6].Type = SeAdtParmTypePrivs;
if( v26 )
v27 = 12 * v26 + 8;
else
v27 = 8;
Src.Parameters[6].Length = v27;
Src.Parameters[6].Address = v9;
}
if( v10 )
{
v28 = *v10;
Src.Parameters[7].Type = SeAdtParmTypePrivs;
if( v28 )
v29 = 12 * v28 + 8;
else
v29 = 8;
Src.Parameters[7].Length = v29;
Src.Parameters[7].Address = v10;
}
Src.ParameterCount = 8;
SepAdtLogAuditRecord(&Src);
}
}
}
LABEL_4:
if( P )
ExFreePoolWithTag(P, 0);
if( v9 )
ExFreePoolWithTag(v9, 0);
if( v10 )
ExFreePoolWithTag(v10, 0);
SeReleaseSubjectContext(&SubjectContext);
}Referenced by:
SepAdjustPrivileges