SepAdtPrivilegeObjectAuditAlarm
UINT8 __fastcall SepAdtPrivilegeObjectAuditAlarm(
_UNICODE_STRING *CapturedSubsystemName,
_UNICODE_STRING *ObjectTypeName,
_UNICODE_STRING *AbsoluteObjectName,
VOID *HandleId,
_TOKEN *ClientToken,
_TOKEN *PrimaryToken,
VOID *ProcessId,
UINT64 DesiredAccess,
_PRIVILEGE_SET *CapturedPrivileges,
UINT8 AccessGranted){
_UNICODE_STRING *v10;
_UNICODE_STRING *v11;
_SID_AND_ATTRIBUTES *v13;
unsigned __int8 *Sid;
__int64 CurrentThreadProcess;
int AllocatedFullProcessImageName;
_UNICODE_STRING *v17;
_LUID AuthenticationId;
int v19;
ULONG v20;
int Length;
int v22;
UINT8 IsKernelHandle;
unsigned __int64 v24;
unsigned __int32 v25;
ULONG_PTR v26;
int v27;
__int64 v28;
unsigned __int64 v29;
unsigned int PrivilegeCount;
int v31;
UINT16 FlatSubCategoryId[4];
PVOID P;
_UNICODE_STRING *v34;
PVOID Handle;
_SE_ADT_PARAMETER_ARRAY Src;
v34 = CapturedSubsystemName;
v10 = AbsoluteObjectName;
Handle = HandleId;
LOBYTE(AbsoluteObjectName) = AccessGranted == 0;
v11 = ObjectTypeName;
FlatSubCategoryId[0] = 0;
P = 0i64;
LOBYTE(ObjectTypeName) = AccessGranted;
if( !(unsigned __int8)SepAdtAuditPrivilegeUseWithContext(
CapturedPrivileges,
(INT64)ObjectTypeName,
(INT64)AbsoluteObjectName,
0i64,
FlatSubCategoryId) )
return 0;
v13 = ClientToken ? ClientToken->UserAndGroups : PrimaryToken->UserAndGroups;
Sid = (unsigned __int8 *)v13->Sid;
if( RtlEqualSid(SeLocalSystemSid, v13->Sid) )
return 0;
CurrentThreadProcess = PsGetCurrentThreadProcess();
AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &P);
if( AllocatedFullProcessImageName < 0 )
{
SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
return 0;
}
v17 = (_UNICODE_STRING *)&SeSubsystemName;
AuthenticationId = PrimaryToken->AuthenticationId;
if( v34 )
v17 = v34;
memset((INT64)&Src, 0i64);
Src.CategoryId = 4;
Src.FlatSubCategoryId = FlatSubCategoryId[0];
Src.AuditId = 4674;
Src.Type = 8;
if( !AccessGranted )
Src.Type = 16;
v19 = Sid[1];
v20 = v17->Length + 16;
Src.Parameters[0].Address = Sid;
Src.Parameters[0].Type = SeAdtParmTypeSid;
Src.Parameters[1].Type = SeAdtParmTypeString;
Src.Parameters[0].Length = 4 * v19 + 8;
Src.Parameters[1].Length = v20;
Src.Parameters[1].Address = v17;
Src.Parameters[2].Type = SeAdtParmTypeLogonId;
Src.Parameters[2].Length = 8;
if( ClientToken )
Src.Parameters[2].Data[0] = (ULONG_PTR)ClientToken->AuthenticationId;
else
Src.Parameters[2].Data[0] = (ULONG_PTR)AuthenticationId;
Src.Parameters[3].Type = SeAdtParmTypeString;
Src.Parameters[3].Length = v20;
Src.Parameters[3].Address = v17;
if( v11 )
{
Length = v11->Length;
Src.Parameters[4].Type = SeAdtParmTypeString;
Src.Parameters[4].Length = Length + 16;
Src.Parameters[4].Address = v11;
}
if( v10 )
{
v22 = v10->Length;
Src.Parameters[5].Type = SeAdtParmTypeFileSpec;
Src.Parameters[5].Length = v22 + 16;
Src.Parameters[5].Address = v10;
}
Src.Parameters[6].Type = SeAdtParmTypePtr;
Src.Parameters[6].Length = 8;
IsKernelHandle = ObpIsKernelHandle(Handle, 0);
v29 = v28 ^ 0xFFFFFFFF80000000ui64;
Src.Parameters[7].Length = v26;
Src.Parameters[7].Data[0] = (unsigned int)DesiredAccess;
if( !IsKernelHandle )
v29 = v24;
Src.Parameters[6].Data[0] = v29 & 0xFFFFFFFFFFFFFFFCui64;
if( v11 )
{
Src.Parameters[7].Type = SeAdtParmTypeAccessMask;
Src.Parameters[7].Data[1] = v26;
}
else
{
Src.Parameters[7].Type = SeAdtParmTypeUlong;
}
if( CapturedPrivileges )
{
PrivilegeCount = CapturedPrivileges->PrivilegeCount;
if( CapturedPrivileges->PrivilegeCount )
{
Src.Parameters[8].Type = v25;
Src.Parameters[8].Address = CapturedPrivileges;
Src.Parameters[8].Length = 12 * PrivilegeCount + 8;
}
}
Src.Parameters[9].Data[0] = (ULONG_PTR)ProcessId;
Src.Parameters[9].Type = SeAdtParmTypePtr;
v31 = *(unsigned __int16 *)P;
Src.Parameters[9].Length = v25;
Src.Parameters[10].Length = v27 + v31;
Src.Parameters[10].Type = SeAdtParmTypeFileSpec;
Src.Parameters[10].Address = P;
Src.ParameterCount = 11;
SepAdtLogAuditRecord(&Src);
ExFreePoolWithTag(P, 0);
return 1;
}Referenced by:
NtOpenObjectAuditAlarm
NtPrivilegeObjectAuditAlarm
ObpCreateHandle
SeAuditHandleCreation
SeOpenObjectAuditAlarmForNonObObject
SePrivilegeObjectAuditAlarm
SepAccessCheckAndAuditAlarmWithAdminlessChecks