SepAdtPrivilegedServiceAuditAlarm
VOID __stdcall SepAdtPrivilegedServiceAuditAlarm(
_SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
_UNICODE_STRING *CapturedSubsystemName,
_UNICODE_STRING *CapturedServiceName,
_TOKEN *ClientToken,
_TOKEN *PrimaryToken,
_PRIVILEGE_SET *CapturedPrivileges,
UINT8 AccessGranted){
_EPROCESS *CurrentThreadProcess;
NTSTATUS AllocatedFullProcessImageName;
_SID_AND_ATTRIBUTES *UserAndGroups;
unsigned __int8 *Sid;
_UNICODE_STRING *v13;
_LUID AuthenticationId;
int v15;
unsigned int v16;
int Length;
unsigned int PrivilegeCount;
unsigned int v19;
UINT16 FlatSubCategoryId[4];
_UNICODE_STRING *ImageName;
_UNICODE_STRING *v22;
unsigned __int64 UniqueProcessId;
_SE_ADT_PARAMETER_ARRAY AuditParameters;
v22 = CapturedSubsystemName;
ImageName = 0i64;
FlatSubCategoryId[0] = 0;
if( SepAdtAuditPrivilegeUseWithContext(
CapturedPrivileges,
AccessGranted,
AccessGranted == 0,
SubjectSecurityContext,
FlatSubCategoryId) )
{
CurrentThreadProcess = (_EPROCESS *)PsGetCurrentThreadProcess();
UniqueProcessId = (unsigned __int64)CurrentThreadProcess->UniqueProcessId;
AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &ImageName);
if( AllocatedFullProcessImageName >= 0 )
{
if( ClientToken )
UserAndGroups = ClientToken->UserAndGroups;
else
UserAndGroups = PrimaryToken->UserAndGroups;
Sid = (unsigned __int8 *)UserAndGroups->Sid;
v13 = (_UNICODE_STRING *)&SeSubsystemName;
AuthenticationId = PrimaryToken->AuthenticationId;
if( v22 )
v13 = v22;
memset(&AuditParameters, 0i64, sizeof(AuditParameters));
AuditParameters.CategoryId = 4;
AuditParameters.FlatSubCategoryId = FlatSubCategoryId[0];
AuditParameters.AuditId = 4673;
AuditParameters.Type = 8;
if( !AccessGranted )
AuditParameters.Type = 16;
v15 = Sid[1];
AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
v16 = v13->Length + 16;
AuditParameters.Parameters[0].Address = Sid;
AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
AuditParameters.Parameters[0].Length = 4 * v15 + 8;
AuditParameters.Parameters[1].Length = v16;
AuditParameters.Parameters[1].Address = v13;
AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
AuditParameters.Parameters[2].Length = 8;
if( ClientToken )
AuditParameters.Parameters[2].Data[0] = (unsigned __int64)ClientToken->AuthenticationId;
else
AuditParameters.Parameters[2].Data[0] = (unsigned __int64)AuthenticationId;
AuditParameters.Parameters[3].Type = SeAdtParmTypeString;
AuditParameters.Parameters[3].Length = v16;
AuditParameters.Parameters[3].Address = v13;
if( CapturedServiceName )
{
Length = CapturedServiceName->Length;
AuditParameters.Parameters[4].Type = SeAdtParmTypeString;
AuditParameters.Parameters[4].Length = Length + 16;
AuditParameters.Parameters[4].Address = CapturedServiceName;
}
if( CapturedPrivileges )
{
PrivilegeCount = CapturedPrivileges->PrivilegeCount;
if( CapturedPrivileges->PrivilegeCount )
{
AuditParameters.Parameters[5].Type = SeAdtParmTypePrivs;
AuditParameters.Parameters[5].Address = CapturedPrivileges;
AuditParameters.Parameters[5].Length = 12 * PrivilegeCount + 8;
}
}
AuditParameters.Parameters[6].Data[0] = UniqueProcessId;
AuditParameters.Parameters[7].Address = ImageName;
v19 = ImageName->Length + 16;
AuditParameters.Parameters[6].Type = SeAdtParmTypePtr;
AuditParameters.Parameters[7].Length = v19;
AuditParameters.Parameters[6].Length = 8;
AuditParameters.Parameters[7].Type = SeAdtParmTypeFileSpec;
AuditParameters.ParameterCount = 8;
SepAdtLogAuditRecord(&AuditParameters);
}
if( ImageName )
ExFreePoolWithTag(ImageName, 0);
if( AllocatedFullProcessImageName < 0 )
SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
}
}Referenced by:
NtPrivilegedServiceAuditAlarm
PfQuerySuperfetchInformation
SePrivilegedServiceAuditAlarm