DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 结构 (d3dkmddi.h)

DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 结构包含DXGKCB_CREATEPHYSICALMEMORYOBJECT回调函数用于创建物理内存的信息。

语法

typedef struct _DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT {
  HANDLE                    hAdapter;
  SIZE_T                    Size;
  ULONG_PTR                 Context;
  DXGK_PHYSICAL_MEMORY_TYPE Type;
  DXGK_MEMORY_CACHING_TYPE  CacheType;
  union {
    struct {
      PHYSICAL_ADDRESS LowAddress;
      PHYSICAL_ADDRESS HighAddress;
      PHYSICAL_ADDRESS SkipBytes;
      UINT             Flags;
    } Mdl;
    struct {
      PHYSICAL_ADDRESS LowestAcceptableAddress;
      PHYSICAL_ADDRESS HighestAcceptableAddress;
      PHYSICAL_ADDRESS BoundaryAddressMultiple;
    } ContiguousMemory;
    struct {
      ACCESS_MASK        DesiredAccess;
      POBJECT_ATTRIBUTES ObjectAttributes;
      ULONG              PageProtection;
      ULONG              AllocationAttributes;
    } Section;
    struct {
      PHYSICAL_ADDRESS BaseAddress;
    } IOSpace;
  };
  HANDLE                    hPhysicalMemoryObject;
  HANDLE                    hAdapterMemoryObject;
} DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT;

成员

hAdapter

要关联此物理内存的适配器。 此参数是可选的,可以为 NULL。 如果为 NULL,驱动程序必须先调用 DXGKCB_OPENPHYSICALMEMORYOBJECT ,然后才能 (ADL) 创建地址描述符列表。 有关更多信息,请参见备注。

Size

所请求的物理内存的大小(以字节为单位)。 如果 Type为DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE则 Size 是指驱动程序提供的 IO 空间区域的大小。

Context

Dxgkrnl 将用于调试的物理内存对象一起存储的指针大小的上下文数据片段。 Dxgkrnl 绝不会以任何方式直接使用或取消引用此值。 这可能是驱动程序选择的任何值,例如拥有此物理内存对象的驱动程序拥有对象的内存地址。

Type

一个DXGK_PHYSICAL_MEMORY_TYPE值,该值指定要创建的物理内存的类型。 如果 type为DXGK_PHYSICAL_MEMORY_TYPE_SECTION,则 section 对象的分配属性始终SEC_COMMIT (PF 映射的节) ,缓存类型由 CacheType 确定。

CacheType

页面的缓存类型。 如果 Type为DXGK_PHYSICAL_MEMORY_TYPE_SECTION,则 CacheType 必须缓存或写入组合。

Mdl

仅在DXGK_PHYSICAL_MEMORY_TYPE_MDLType 时使用。

Mdl.LowAddress

仅在DXGK_PHYSICAL_MEMORY_TYPE_MDLType 时使用。 有关详细信息,请参阅 MmAllocatePagesForMdlEx

Mdl.HighAddress

仅在DXGK_PHYSICAL_MEMORY_TYPE_MDLType 时使用。 有关详细信息,请参阅 MmAllocatePagesForMdlEx

Mdl.SkipBytes

仅在DXGK_PHYSICAL_MEMORY_TYPE_MDLType 时使用。 有关详细信息,请参阅 MmAllocatePagesForMdlEx

Mdl.Flags

仅在DXGK_PHYSICAL_MEMORY_TYPE_MDLType 时使用。 有关详细信息,请参阅 MmAllocatePagesForMdlEx

ContiguousMemory

仅在DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYType 时才使用。

ContiguousMemory.LowestAcceptableAddress

仅在DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYType 时才使用。 有关详细信息 ,请参阅 MmAllocateContiguousMemorySpecifyCache

ContiguousMemory.HighestAcceptableAddress

仅在DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYType 时才使用。 有关详细信息 ,请参阅 MmAllocateContiguousMemorySpecifyCache

ContiguousMemory.BoundaryAddressMultiple

仅在DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYType 时才使用。 有关详细信息 ,请参阅 MmAllocateContiguousMemorySpecifyCache

Section

仅在类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时才使用。

Section.DesiredAccess

仅在类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时才使用。 有关详细信息 ,请参阅 ZwCreateSection

Section.ObjectAttributes

仅在类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时才使用。 有关详细信息 ,请参阅 ZwCreateSection

Section.PageProtection

仅在类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时才使用。 此值应为下列值之一:PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE或PAGE_WRITECOPY。 请勿在此字段中指定缓存属性 (例如SEC_WRITECOMBINED) 。 分区对象的分配属性始终SEC_COMMIT (PF 映射的节) ,缓存类型由 CacheType 确定。 有关详细信息 ,请参阅 ZwCreateSection

Section.AllocationAttributes

仅在类型DXGK_PHYSICAL_MEMORY_TYPE_SECTION时才使用。 有关详细信息 ,请参阅 ZwCreateSection

IOSpace

仅在DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEType 时才使用。

IOSpace.BaseAddress

仅在DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEType 时才使用。 指定 IO 空间区域的起始物理地址。 此值必须与PAGE_SIZE的倍数对齐。

hPhysicalMemoryObject

成功调用 DXGKCB_CREATEPHYSICALMEMORYOBJECT 时,这是一个返回 Dxgkrnl 托管物理内存对象的不透明句柄。 物理内存对象可以提供给其他记录的内存管理功能,以映射虚拟地址以供 CPU 访问。 可以通过调用 DXGKCB_DESTROYPHYSICALMEMORYOBJECT 来关闭此句柄。

hAdapterMemoryObject

成功调用 DXGKCB_CREATEPHYSICALMEMORYOBJECT 时,这是一个返回 Dxgkrnl 托管适配器内存对象的不透明句柄。 可以将适配器内存对象提供给其他记录的内存管理功能,以生成 ADL 以访问 GPU。 如果 hAdapter 为 NULL,则此值将为 NULL,驱动程序必须调用 DXGKCB_OPENPHYSICALMEMORYOBJECT 来创建此句柄。 此句柄可以通过调用 DXGKCB_CLOSEPHYSICALMEMORYOBJECT关闭,也可以提供给 DXGKCB_DESTROYPHYSICALMEMORYOBJECT ( ,但不能同时) 。

注解

创建物理内存对象时,hAdapter 字段是可选的,但在创建 ADL 之前,必须在调用 DXGKCB_OPENPHYSICALMEMORYOBJECT 时针对适配器打开该对象。 这是因为 ADL 表示逻辑内存,并且每个逻辑适配器都有一个唯一的域。 创建内存时针对哪个物理适配器并不重要。 它将由物理适配器所属的逻辑适配器打开,并映射到所有链接的物理适配器。

有关详细信息 ,请参阅 IOMMU DMA 重新映射

要求

要求
最低受支持的服务器 Windows Server 2022 (WDDM 2.9)
标头 d3dkmddi.h

另请参阅

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection