SepAdtCloseObjectAuditAlarm

VOID __stdcall SepAdtCloseObjectAuditAlarm(
        _UNICODE_STRING *CapturedSubsystemName,
        VOID *HandleId,
        _SECURITY_SUBJECT_CONTEXT *SubjectSecurityContext,
        VOID *Object,
        UINT8 IsKernelObject){
  _EPROCESS *CurrentThreadProcess; 
  unsigned __int64 UniqueProcessId; 
  NTSTATUS AllocatedFullProcessImageName; 
  _UNICODE_STRING *v11; 
  unsigned __int64 *ClientToken; 
  _QWORD **PrimaryToken; 
  void *v14; 
  void **v15; 
  unsigned int v16; 
  unsigned __int64 v17; 
  UINT8 IsKernelHandle; 
  __int64 v19; 
  unsigned __int64 v20; 
  _SE_ADT_PARAMETER_TYPE v21; 
  unsigned int v22; 
  UINT16 FlatSubCategoryId; 
  _UNICODE_STRING *ImageName; 
  _SE_ADT_PARAMETER_ARRAY AuditParameters; 

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

Referenced by:

NtCloseObjectAuditAlarm
SeCloseObjectAuditAlarm
SeCloseObjectAuditAlarmForNonObObject