SepAdtDeleteObjectAuditAlarm

VOID __stdcall SepAdtDeleteObjectAuditAlarm(
        UNICODE_STRING *CapturedSubsystemName,
        PVOID HandleId,
        SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        PVOID Object,
        GUID *TransactionId,
        UINT8 IsKernelObject){
  __int64 CurrentThreadProcess; 
  int AllocatedFullProcessImageName; 
  GUID *v11; 
  UNICODE_STRING *v12; 
  ULONG_PTR *ClientToken; 
  _QWORD **PrimaryToken; 
  void *v15; 
  PVOID *v16; 
  ULONG v17; 
  ULONG_PTR v18; 
  UINT8 IsKernelHandle; 
  __int64 v20; 
  unsigned __int64 v21; 
  SE_ADT_PARAMETER_TYPE v22; 
  __int64 v23; 
  int v24; 
  UINT16 FlatSubCategoryId; 
  PVOID P; 
  _SE_ADT_PARAMETER_ARRAY Src; 
  __int128 v28; 
  LOBYTE(v24) = IsKernelObject;
  P = 0i64;
  FlatSubCategoryId = 0;
  v28 = 0i64;
  if( SepAdtAuditObjectAccessWithContext(Object, CapturedSubsystemName, 1u, 0, 0i64, v24, &FlatSubCategoryId) )
  {
    CurrentThreadProcess = PsGetCurrentThreadProcess();
    AllocatedFullProcessImageName = PsGetAllocatedFullProcessImageNameEx(CurrentThreadProcess, &P);
    if( AllocatedFullProcessImageName < 0 )
    {
      SepAuditFailed((unsigned int)AllocatedFullProcessImageName);
    }
    else
    {
      v11 = (GUID *)&v28;
      if( TransactionId )
        v11 = TransactionId;
      memset((INT64)&Src, 0i64);
      v12 = (UNICODE_STRING *)&SeSubsystemName;
      ClientToken = (ULONG_PTR *)SubjectSecurityContext->ClientToken;
      Src.FlatSubCategoryId = FlatSubCategoryId;
      Src.CategoryId = 3;
      PrimaryToken = (_QWORD **)ClientToken;
      if( CapturedSubsystemName )
        v12 = CapturedSubsystemName;
      Src.AuditId = 4660;
      Src.Type = 8;
      Src.Parameters[0].Type = SeAdtParmTypeSid;
      if( !ClientToken )
        PrimaryToken = (_QWORD **)SubjectSecurityContext->PrimaryToken;
      Src.Parameters[0].Length = 4 * *(unsigned __int8 *)(*PrimaryToken[19] + 1i64) + 8;
      v15 = ClientToken;
      if( !ClientToken )
        v15 = SubjectSecurityContext->PrimaryToken;
      v16 = (PVOID *)*((_QWORD *)v15 + 19);
      Src.Parameters[1].Type = SeAdtParmTypeString;
      Src.Parameters[1].Address = v12;
      Src.Parameters[2].Type = SeAdtParmTypeLogonId;
      Src.Parameters[0].Address = *v16;
      v17 = v12->Length + 16;
      Src.Parameters[2].Length = 8;
      Src.Parameters[1].Length = v17;
      if( !ClientToken )
        ClientToken = (ULONG_PTR *)SubjectSecurityContext->PrimaryToken;
      v18 = ClientToken[3];
      Src.Parameters[3].Address = v12;
      Src.Parameters[3].Length = v17;
      Src.Parameters[4].Type = SeAdtParmTypePtr;
      Src.Parameters[2].Data[0] = v18;
      Src.Parameters[3].Type = SeAdtParmTypeString;
      Src.Parameters[4].Length = 8;
      IsKernelHandle = ObpIsKernelHandle(HandleId, 0);
      v21 = v20 ^ 0xFFFFFFFF80000000ui64;
      Src.Parameters[5].Type = v22;
      Src.Parameters[5].Length = 8;
      if( !IsKernelHandle )
        v21 = (unsigned __int64)HandleId;
      Src.Parameters[4].Data[0] = v21 & 0xFFFFFFFFFFFFFFFCui64;
      v23 = PsGetCurrentThreadProcess();
      Src.Parameters[6].Type = SeAdtParmTypeFileSpec;
      Src.Parameters[7].Type = SeAdtParmTypeGuid;
      Src.Parameters[7].Length = 16;
      Src.Parameters[5].Data[0] = *(_QWORD *)(v23 + 1088);
      Src.Parameters[6].Address = P;
      Src.Parameters[7].Address = v11;
      Src.ParameterCount = 8;
      Src.Parameters[6].Length = *(unsigned __int16 *)P + 16;
      SepAdtLogAuditRecord(&Src);
    }
    if( P )
      ExFreePoolWithTag(P, 0);
  }
}

Referenced by:

NtDeleteObjectAuditAlarm
SeDeleteObjectAuditAlarmWithTransaction