HalpIommuJoinDmaDomain

INT64 __fastcall HalpIommuJoinDmaDomain(INT64 *a1, LONGLONG a2){
  INT64 v4; 
  int v5; 
  INT64 result; 
  LARGE_INTEGER *v7; 
  int v8; 
  int v9; 
  INT64 v10; 
  __int64 v11; 
  LARGE_INTEGER *v12; 
  v9 = 0;
  v11 = 0i64;
  v12 = 0i64;
  if( HalpHvIommu )
  {
    v4 = a1[3];
    v12 = 0i64;
    v9 = 0;
    v11 = 0i64;
    v10 = v4;
    LODWORD(v12) = *(_DWORD *)(a2 + 32);
    BYTE4(v12) = *(_BYTE *)(a2 + 40);
    v8 = 4;
    return(unsigned int)((__int64(__fastcall *)(int *, LARGE_INTEGER **))qword_140C4A2B8)(&v8, &v12);
  }
  else
  {
    result = HalpIommuGetHardwareDomain(a2, a1[1], 1, 1, &v12);
    if( (int)result < 0 )
      return result;
    v7 = v12;
    v5 = HalpIommuAttachDeviceDomain(a1[1], *a1, (INT64)&v12[4]);
    if( v5 < 0 )
      HalpIommuDereferenceHardwareDomain(a2, v7);
  }
  return(unsigned int)v5;
}

Referenced by:

HalJoinDmaDomain
HalpIommuUnblockDevice
IommuDomainAttachDevice