SepAdtDeleteObjectAuditAlarm

VOID __stdcall SepAdtDeleteObjectAuditAlarm(
        _UNICODE_STRING *CapturedSubsystemName,
        VOID *HandleId,
        _SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        VOID *Object,
        _GUID *TransactionId,
        UINT8 IsKernelObject){
  _EPROCESS *CurrentThreadProcess; 
  NTSTATUS AllocatedFullProcessImageName; 
  _GUID *v11; 
  _UNICODE_STRING *v12; 
  unsigned __int64 *ClientToken; 
  _QWORD **PrimaryToken; 
  void *v15; 
  void **v16; 
  unsigned int v17; 
  unsigned __int64 v18; 
  UINT8 IsKernelHandle; 
  __int64 v20; 
  unsigned __int64 v21; 
  _SE_ADT_PARAMETER_TYPE v22; 
  _KPROCESS *v23; 
  UINT16 FlatSubCategoryId; 
  _UNICODE_STRING *ImageName; 
  _SE_ADT_PARAMETER_ARRAY AuditParameters; 
  __int128 v27; 

  ImageName = 0i64;
  FlatSubCategoryId = 0;
  v27 = 0i64;
  if( SepAdtAuditObjectAccessWithContext(
         Object,
         CapturedSubsystemName,
         1u,
         0,
         0i64,
         IsKernelObject,
         &FlatSubCategoryId) )
  {
    CurrentThreadProcess = (_EPROCESS *)PsGetCurrentThreadProcess();
    AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &ImageName);
    if( AllocatedFullProcessImageName < 0 )
    {
      SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
    }
    else
    {
      v11 = (_GUID *)&v27;
      if( TransactionId )
        v11 = TransactionId;
      memset(&AuditParameters, 0i64, sizeof(AuditParameters));
      v12 = (_UNICODE_STRING *)&SeSubsystemName;
      ClientToken = (unsigned __int64 *)SubjectSecurityContext->ClientToken;
      AuditParameters.FlatSubCategoryId = FlatSubCategoryId;
      AuditParameters.CategoryId = 3;
      PrimaryToken = (_QWORD **)ClientToken;
      if( CapturedSubsystemName )
        v12 = CapturedSubsystemName;
      AuditParameters.AuditId = 4660;
      AuditParameters.Type = 8;
      AuditParameters.Parameters[0].Type = SeAdtParmTypeSid;
      if( !ClientToken )
        PrimaryToken = (_QWORD **)SubjectSecurityContext->PrimaryToken;
      AuditParameters.Parameters[0].Length = 4 * *(unsigned __int8 *)(*PrimaryToken[19] + 1i64) + 8;
      v15 = ClientToken;
      if( !ClientToken )
        v15 = SubjectSecurityContext->PrimaryToken;
      v16 = (void **)*((_QWORD *)v15 + 19);
      AuditParameters.Parameters[1].Type = SeAdtParmTypeString;
      AuditParameters.Parameters[1].Address = v12;
      AuditParameters.Parameters[2].Type = SeAdtParmTypeLogonId;
      AuditParameters.Parameters[0].Address = *v16;
      v17 = v12->Length + 16;
      AuditParameters.Parameters[2].Length = 8;
      AuditParameters.Parameters[1].Length = v17;
      if( !ClientToken )
        ClientToken = (unsigned __int64 *)SubjectSecurityContext->PrimaryToken;
      v18 = ClientToken[3];
      AuditParameters.Parameters[3].Address = v12;
      AuditParameters.Parameters[3].Length = v17;
      AuditParameters.Parameters[4].Type = SeAdtParmTypePtr;
      AuditParameters.Parameters[2].Data[0] = v18;
      AuditParameters.Parameters[3].Type = SeAdtParmTypeString;
      AuditParameters.Parameters[4].Length = 8;
      IsKernelHandle = ObpIsKernelHandle(HandleId, 0);
      v21 = v20 ^ 0xFFFFFFFF80000000ui64;
      AuditParameters.Parameters[5].Type = v22;
      AuditParameters.Parameters[5].Length = 8;
      if( !IsKernelHandle )
        v21 = (unsigned __int64)HandleId;
      AuditParameters.Parameters[4].Data[0] = v21 & 0xFFFFFFFFFFFFFFFCui64;
      v23 = (_EPROCESS *)PsGetCurrentThreadProcess();
      AuditParameters.Parameters[6].Type = SeAdtParmTypeFileSpec;
      AuditParameters.Parameters[7].Type = SeAdtParmTypeGuid;
      AuditParameters.Parameters[7].Length = 16;
      AuditParameters.Parameters[5].Data[0] = (unsigned __int64)v23->UniqueProcessId;
      AuditParameters.Parameters[6].Address = ImageName;
      AuditParameters.Parameters[7].Address = v11;
      AuditParameters.ParameterCount = 8;
      AuditParameters.Parameters[6].Length = ImageName->Length + 16;
      SepAdtLogAuditRecord(&AuditParameters);
    }
    if( ImageName )
      ExFreePoolWithTag(ImageName, 0);
  }
}

Referenced by:

NtDeleteObjectAuditAlarm
SeDeleteObjectAuditAlarmWithTransaction