HalpIommuTraceFault

CHAR HalpIommuTraceFault(PINTERRUPT_INITIALIZE_IO_UNIT *a1, INT64 a2, NPTEXTMETRIC *a3, ...){
  UINT8 *v3; 
  UINT8 *v4; 
  REGHANDLE v5; 
  _EVENT_DATA_DESCRIPTOR UserData; 
  INT64 *v8; 
  int v9; 
  int v10; 
  int *v11; 
  int v12; 
  int v13; 
  va_list v14; 
  int v15; 
  int v16; 
  void *retaddr; 
  PINTERRUPT_INITIALIZE_IO_UNIT *v18; 
  INT64 v19; 
  int v20; 
  __int64 v21; 
  va_list va1; 
  va_list va; 

  va_start(va1, a3);
  va_start(va, a3);
  v21 = va_arg(va1, _QWORD);
  v3 = (UINT8 *)&retaddr;
  v20 = (int)a3;
  v19 = a2;
  v18 = a1;
  if( byte_140C4A328 )
  {
    v5 = qword_140C4A320;
    LOBYTE(v3) = EtwEventEnabled(qword_140C4A320, &HAL_ETW_EVENT_IOMMU_FAULT);
    if( (_BYTE)v3 )
    {
      UserData.Reserved = 0;
      v10 = 0;
      v13 = 0;
      v16 = 0;
      UserData.Ptr = (unsigned __int64)&v18;
      v8 = &v19;
      v11 = &v20;
      UserData.Size = 8;
      va_copy(v14, va);
      v9 = 8;
      v12 = 4;
      v15 = 8;
      LOBYTE(v3) = EtwWriteEx(v5, &HAL_ETW_EVENT_IOMMU_FAULT, 0i64, 0, 0, 0, 4u, &UserData);
    }
  }
  else if( !HalpIommuGlobalEventBuffer )
  {
    v3 = HalpMmAllocCtxAlloc((_HALP_ALLOC_CONTEXT *)a1, 0x20ui64);
    HalpIommuGlobalEventBuffer = (__int64)v3;
    v4 = v3;
    if( v3 )
    {
      *(_OWORD *)v3 = 0i64;
      *((_OWORD *)v3 + 1) = 0i64;
      *(_QWORD *)v3 = v18;
      *((_QWORD *)v3 + 1) = v19;
      *((_DWORD *)v3 + 4) = v20;
      LOBYTE(v3) = v21;
      *((_QWORD *)v4 + 3) = v21;
    }
  }
  return(char)v3;
}

Referenced by:

HalpIommuReportIommuFault