//0xd8 bytes (sizeof)
struct _DMA_IOMMU_INTERFACE_V3
{
LONG (*CreateDomainEx)(enum
_IOMMU_DMA_DOMAIN_TYPE arg1, union
_IOMMU_DMA_DOMAIN_CREATION_FLAGS arg2, struct
_IOMMU_DMA_LOGICAL_ALLOCATOR_CONFIG* arg3, struct
_IOMMU_DMA_RESERVED_REGION* arg4, struct
_IOMMU_DMA_DOMAIN** arg5); //0x0
LONG (*DeleteDomain)(struct
_IOMMU_DMA_DOMAIN* arg1); //0x8
LONG (*AttachDeviceEx)(struct
_IOMMU_DMA_DOMAIN* arg1, struct
_IOMMU_DMA_DEVICE* arg2); //0x10
LONG (*DetachDeviceEx)(struct
_IOMMU_DMA_DEVICE* arg1); //0x18
LONG (*FlushDomain)(struct
_IOMMU_DMA_DOMAIN* arg1); //0x20
LONG (*FlushDomainByVaList)(struct
_IOMMU_DMA_DOMAIN* arg1, UCHAR arg2, ULONG arg3, VOID* arg4); //0x28
LONG (*QueryInputMappings)(struct
_DEVICE_OBJECT* arg1, struct
_INPUT_MAPPING_ELEMENT* arg2, ULONG arg3, ULONG* arg4); //0x30
LONG (*MapLogicalRangeEx)(struct
_IOMMU_DMA_DOMAIN* arg1, ULONG arg2, struct
_IOMMU_MAP_PHYSICAL_ADDRESS* arg3, ULONGLONG* arg4, ULONGLONG* arg5, ULONGLONG* arg6, ULONGLONG* arg7); //0x38
LONG (*UnmapLogicalRange)(struct
_IOMMU_DMA_DOMAIN* arg1, ULONGLONG arg2, ULONGLONG arg3); //0x40
LONG (*MapIdentityRangeEx)(struct
_IOMMU_DMA_DOMAIN* arg1, ULONG arg2, struct
_IOMMU_MAP_PHYSICAL_ADDRESS* arg3); //0x48
LONG (*UnmapIdentityRangeEx)(struct
_IOMMU_DMA_DOMAIN* arg1, struct
_IOMMU_MAP_PHYSICAL_ADDRESS* arg2); //0x50
LONG (*SetDeviceFaultReportingEx)(struct
_IOMMU_DMA_DEVICE* arg1, ULONG arg2, UCHAR arg3, struct
_DEVICE_FAULT_CONFIGURATION* arg4); //0x58
LONG (*ConfigureDomain)(struct
_IOMMU_DMA_DOMAIN* arg1, struct
_DOMAIN_CONFIGURATION* arg2); //0x60
VOID (*QueryAvailableDomainTypes)(struct
_IOMMU_DMA_DEVICE* arg1, ULONG* arg2); //0x68
LONG (*RegisterInterfaceStateChangeCallback)(VOID (*arg1)(struct
_IOMMU_INTERFACE_STATE_CHANGE* arg1, VOID* arg2), VOID* arg2, struct
_IOMMU_DMA_DEVICE* arg3, union
_IOMMU_INTERFACE_STATE_CHANGE_FIELDS* arg4); //0x70
LONG (*UnregisterInterfaceStateChangeCallback)(VOID (*arg1)(struct
_IOMMU_INTERFACE_STATE_CHANGE* arg1, VOID* arg2), struct
_IOMMU_DMA_DEVICE* arg2); //0x78
LONG (*ReserveLogicalAddressRange)(struct
_IOMMU_DMA_DOMAIN* arg1, ULONGLONG arg2, ULONGLONG* arg3, ULONGLONG* arg4, ULONGLONG* arg5, struct
_IOMMU_DMA_LOGICAL_ADDRESS_TOKEN** arg6); //0x80
LONG (*FreeReservedLogicalAddressRange)(struct
_IOMMU_DMA_LOGICAL_ADDRESS_TOKEN* arg1); //0x88
LONG (*MapReservedLogicalRange)(struct
_IOMMU_DMA_LOGICAL_ADDRESS_TOKEN* arg1, ULONGLONG arg2, ULONG arg3, struct
_IOMMU_MAP_PHYSICAL_ADDRESS* arg4, struct
_IOMMU_DMA_LOGICAL_ADDRESS_TOKEN_MAPPED_SEGMENT* arg5); //0x90
LONG (*UnmapReservedLogicalRange)(struct
_IOMMU_DMA_LOGICAL_ADDRESS_TOKEN_MAPPED_SEGMENT* arg1); //0x98
LONG (*CreateDevice)(struct
_DEVICE_OBJECT* arg1, struct
_IOMMU_DEVICE_CREATION_CONFIGURATION* arg2, struct
_IOMMU_DMA_DEVICE** arg3); //0xa0
LONG (*DeleteDevice)(struct
_IOMMU_DMA_DEVICE* arg1); //0xa8
LONG (*CreatePasidDevice)(struct
_IOMMU_DMA_DEVICE* arg1, struct
_IOMMU_DMA_PASID_DEVICE** arg2, ULONG* arg3); //0xb0
LONG (*DeletePasidDevice)(struct
_IOMMU_DMA_PASID_DEVICE* arg1); //0xb8
LONG (*AttachPasidDevice)(struct
_IOMMU_DMA_DOMAIN* arg1, struct
_IOMMU_DMA_PASID_DEVICE* arg2); //0xc0
LONG (*DetachPasidDevice)(struct
_IOMMU_DMA_PASID_DEVICE* arg1); //0xc8
LONG (*QueryDeviceInfo)(struct
_IOMMU_DMA_DEVICE* arg1, ULONG arg2, ULONG* arg3, struct
_IOMMU_DMA_DEVICE_INFORMATION* arg4); //0xd0
};