DXGK_ADL structure (d3dkmddi.h)

The DXGK_ADL structure is an address descriptor list (ADL), which used to describe an array of pages that can be either physical or logical.


typedef struct _DXGK_ADL {
  UINT32         PageCount;
  union {
    DXGK_PAGE_NUMBER       BasePageNumber;
    const DXGK_PAGE_NUMBER *Pages;



The number of pages that the ADL represents.


A DXGK_ADL_FLAGS structure that specifies flags for the ADL.


Used for contiguous ADLs. When Flags.Contiguous is set, BasePageNumber is the initial page number of a contiguous range of memory and PageCount is the number of pages that it represents. For example, if PageCount=3 and BasePageNumber=100, then DXGK_ADL represents the pages 100, 101, and 102 (address range 0x100000-0x102000).


Used for non-contiguous ADLs. When Flags.Contiguous is not set, Pages points to an array of exactly PageCount pages. The pages in the array are not guaranteed to be contiguous.

Pages is of type DXGK_PAGE_NUMBER, which is guaranteed to be the same size as a PFN_NUMBER. This array can be substituted in place of an MDL's PFN array when programming the hardware.


Dxgkernel provides ADLs in order to support both physical and logical access modes, and be able to switch between the two modes seamlessly at runtime. An ADL is very similar to an MDL, but describes an array of pages that can be either physical or logical. Because these pages can be logical pages, the addresses described by an ADL cannot be mapped to a virtual address for direct CPU access.

For more information, see IOMMU DMA remapping.


Minimum supported server Windows Server 2022
Header d3dkmddi.h

See also