struct _DMA_IOMMU_INTERFACE
{
ULONG Version;
LONG (*CreateDomain)(
UCHAR arg1,
struct _IOMMU_DMA_DOMAIN** arg2);
LONG (*DeleteDomain)(
struct _IOMMU_DMA_DOMAIN* arg1);
LONG (*AttachDevice)(
struct _IOMMU_DMA_DOMAIN* arg1,
struct _DEVICE_OBJECT* arg2,
ULONG arg3,
ULONG arg4);
LONG (*DetachDevice)(
struct _IOMMU_DMA_DOMAIN* arg1,
struct _DEVICE_OBJECT* arg2,
ULONG arg3);
LONG (*FlushDomain)(
struct _IOMMU_DMA_DOMAIN* arg1);
LONG (*FlushDomainByVaList)(
struct _IOMMU_DMA_DOMAIN* arg1,
UCHAR arg2,
ULONG arg3,
VOID* arg4);
LONG (*QueryInputMappings)(
struct _DEVICE_OBJECT* arg1,
struct _INPUT_MAPPING_ELEMENT* arg2,
ULONG arg3,
ULONG* arg4);
LONG (*MapLogicalRange)(
struct _IOMMU_DMA_DOMAIN* arg1,
ULONG arg2,
struct _MDL* arg3,
ULONGLONG arg4);
LONG (*UnmapLogicalRange)(
struct _IOMMU_DMA_DOMAIN* arg1,
ULONGLONG arg2,
ULONGLONG arg3);
LONG (*MapIdentityRange)(
struct _IOMMU_DMA_DOMAIN* arg1,
ULONG arg2,
struct _MDL* arg3);
LONG (*UnmapIdentityRange)(
struct _IOMMU_DMA_DOMAIN* arg1,
struct _MDL* arg2);
LONG (*SetDeviceFaultReporting)(
struct _DEVICE_OBJECT* arg1,
ULONG arg2,
UCHAR arg3,
struct _DEVICE_FAULT_CONFIGURATION* arg4);
LONG (*ConfigureDomain)(
struct _IOMMU_DMA_DOMAIN* arg1,
struct _DOMAIN_CONFIGURATION* arg2);
};