Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Preallocates logical address space that can be used for future mappings. This grants a driver the ability to ensure forward progress for future map/unmap calls.
Syntax
IOMMU_RESERVE_LOGICAL_ADDRESS_RANGE IommuReserveLogicalAddressRange;
NTSTATUS IommuReserveLogicalAddressRange(
[in] PIOMMU_DMA_DOMAIN Domain,
[in] SIZE_T Size,
[in, optional] PIOMMU_DMA_LOGICAL_ADDRESS ExplicitLogicalAddress,
[in, optional] PIOMMU_DMA_LOGICAL_ADDRESS MinLogicalAddress,
[in, optional] PIOMMU_DMA_LOGICAL_ADDRESS MaxLogicalAddress,
[out] PIOMMU_DMA_LOGICAL_ADDRESS_TOKEN *LogicalAddressToken
)
{...}
Parameters
[in] Domain
A pointer to the IOMMU_DMA_DOMAIN that the reserved logical address will belong to. The ___domain must be of type DomainTypeTranslate. For more information about ___domain types, see IOMMU_DMA_DOMAIN_TYPE.
[in] Size
The size, in bytes, of the logical address range to reserve. This value must represent a whole number of pages.
[in, optional] ExplicitLogicalAddress
The ___domain logical address that should be reserved. If the ___domain was not created with a registered logical allocator, then this field is required. If the ___domain was created with a registered logical allocator that does not support explicit logical address allocation, then this field must be NULL.
[in, optional] MinLogicalAddress
The minimum (inclusive) allowable logical address that can be reserved. If the ___domain was not created with a registered logical allocator, then this field will be ignored.
[in, optional] MaxLogicalAddress
The maximum (inclusive) allowable logical address that can be reserved. If the ___domain was not created with a registered logical allocator, then this field will be ignored.
[out] LogicalAddressToken
Returns a IOMMU_DMA_LOGICAL_ADDRESS_TOKEN representing the reserved logical address range.
Return value
STATUS_SUCCESS if the operation is successful. Possible error return values include the following status codes.
Return code | Description |
---|---|
STATUS_INVALID_PARAMETER_1 | The ___domain provided is not of type DomainTypeTranslate. |
STATUS_INVALID_PARAMETER_2 | The size provided is not a multiple of PAGE_SIZE. |
STATUS_INVALID_PARAMETER_3 | The ExplicitLogicalAddress provided is not page-aligned. |
STATUS_INVALID_PARAMETER_MIX | The min and max logical addresses provided could not be satisfied. |
STATUS_IN_USE | The ExplicitLogicalAddress is already mapped or partially mapped. |
STATUS_NOT_SUPPORTED | An ExplicitLogicalAddress was provided for a ___domain with a logical allocator that does not allow explicit logical address allocation. Or an ExplicitLogicalAddress was not provided for a ___domain with no logical allocator. |
For more information, see NTSTATUS Values.
Remarks
Logical Address tokens can be freed via IOMMU_FREE_RESERVED_LOGICAL_ADDRESS_RANGE.
Logical Address tokens should have portions of their logical address ranges mapped to and unmapped from physical addresses via IOMMU_MAP_RESERVED_LOGICAL_RANGE and IOMMU_UNMAP_RESERVED_LOGICAL_RANGE.
Requirements
Requirement | Value |
---|---|
Minimum supported server | Windows Server 2022 |
Header | wdm.h (include Wdm.h) |
See also
IOMMU_DMA_LOGICAL_ADDRESS_TOKEN
IOMMU_FREE_RESERVED_LOGICAL_ADDRESS_RANGE