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,則區段物件的配置屬性一律SEC_COMMIT (PF 對應區段) ,而且快取類型是由 CacheType 決定。

CacheType

頁面的快取類型。 如果 TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION,則 CacheType 必須快取或寫入結合。

Mdl

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_MDL時才使用。

Mdl.LowAddress

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_MDL時才使用。 如需詳細資訊 ,請參閱 MmAllocatePagesForMdlEx

Mdl.HighAddress

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_MDL時才使用。 如需詳細資訊 ,請參閱 MmAllocatePagesForMdlEx

Mdl.SkipBytes

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_MDL時才使用。 如需詳細資訊 ,請參閱 MmAllocatePagesForMdlEx

Mdl.Flags

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_MDL時才使用。 如需詳細資訊 ,請參閱 MmAllocatePagesForMdlEx

ContiguousMemory

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY時才使用。

ContiguousMemory.LowestAcceptableAddress

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY時才使用。 如需詳細資訊,請參閱 MmAllocateContiguousMemorySpecifyCache

ContiguousMemory.HighestAcceptableAddress

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY時才使用。 如需詳細資訊,請參閱 MmAllocateContiguousMemorySpecifyCache

ContiguousMemory.BoundaryAddressMultiple

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY時才使用。 如需詳細資訊,請參閱 MmAllocateContiguousMemorySpecifyCache

Section

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_SECTION時才使用。

Section.DesiredAccess

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_SECTION時才使用。 如需詳細資訊 ,請參閱 ZwCreateSection

Section.ObjectAttributes

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_SECTION時才使用。 如需詳細資訊 ,請參閱 ZwCreateSection

Section.PageProtection

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_SECTION時才使用。 此值應該是下列其中一個值:PAGE_READONLY、PAGE_READWRITE、PAGE_EXECUTE或PAGE_WRITECOPY。 請勿 (指定快取屬性,例如此欄位中的SEC_WRITECOMBINED) 。 區段物件的配置屬性一律SEC_COMMIT (PF 對應區段) ,而且快取類型是由 CacheType 決定。 如需詳細資訊 ,請參閱 ZwCreateSection

Section.AllocationAttributes

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_SECTION時才使用。 如需詳細資訊 ,請參閱 ZwCreateSection

IOSpace

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE時才使用。

IOSpace.BaseAddress

只有在 Type是DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE時才使用。 指定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 字段是選擇性的,但是必須先針對呼叫中的配接器開啟該物件 DXGKCB_OPENPHYSICALMEMORYOBJECT,才能建立 ADL。 這是因為 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