HalpIommuFreeDmaDomain

NTSTATUS __stdcall HalpIommuFreeDmaDomain(INT64 a1){
  NTSTATUS v1; 
  VOID *v4; 
  _HALP_ALLOC_CONTEXT *v5; 
  __int64 v6; 

  v1 = 0;
  if( !a1 )
    return 0;
  if( byte_140C49B2C )
  {
    v6 = *(unsigned int *)(a1 + 32);
    BYTE4(v6) = *(_BYTE *)(a1 + 40);
    v1 = ((__int64(__fastcall *)(__int64 *))qword_140C4A2C8)(&v6);
  }
  else
  {
    v4 = *(VOID **)(a1 + 24);
    if( v4 )
    {
      HalpIommuCleanupPageTable(*(_QWORD *)(a1 + 24));
      HalpMmAllocCtxFree(v5, v4);
    }
  }
  HalpMmAllocCtxFree((_HALP_ALLOC_CONTEXT *)a1, (VOID *)a1);
  return v1;
}

Referenced by:

HalpDmaDereferenceDomainObject
IommuDomainDelete