структура 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, размер означает размер области пространства ввода-вывода, предоставляемой драйвером.

Context

Элемент контекстных данных размера указателя, который Dxgkrnl будет хранить вместе с объектом физической памяти для отладки. Dxgkrnl никогда не использует это значение напрямую или разыменовывалось каким-либо образом. Это может быть любое значение по выбору драйвера, например адрес памяти для принадлежащего драйверу объекта, которому принадлежит этот объект физической памяти.

Type

Значение DXGK_PHYSICAL_MEMORY_TYPE , указывающее тип создаваемой физической памяти. Если типDXGK_PHYSICAL_MEMORY_TYPE_SECTION, атрибуты выделения объекта раздела всегда SEC_COMMIT (сопоставленный раздел PF), а тип кэша определяется типом CacheType.

CacheType

Тип кэша страниц. Если type имеет значение DXGK_PHYSICAL_MEMORY_TYPE_SECTION, CacheType должен быть либо кэширован, либо объединен с записью.

Mdl

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_MDL.

Mdl.LowAddress

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_MDL. Дополнительные сведения см. в разделе MmAllocatePagesForMdlEx .

Mdl.HighAddress

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_MDL. Дополнительные сведения см. в разделе MmAllocatePagesForMdlEx .

Mdl.SkipBytes

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_MDL. Дополнительные сведения см. в разделе MmAllocatePagesForMdlEx .

Mdl.Flags

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_MDL. Дополнительные сведения см. в разделе MmAllocatePagesForMdlEx .

ContiguousMemory

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY.

ContiguousMemory.LowestAcceptableAddress

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Дополнительные сведения см. в статье MmAllocateContiguousMemorySpecifyCache .

ContiguousMemory.HighestAcceptableAddress

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Дополнительные сведения см. в статье MmAllocateContiguousMemorySpecifyCache .

ContiguousMemory.BoundaryAddressMultiple

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Дополнительные сведения см. в статье 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) в этом поле. Выделенные атрибуты объекта section всегда SEC_COMMIT (PF-сопоставленный раздел), а тип кэша определяется типом CacheType. Дополнительные сведения см. в разделе ZwCreateSection .

Section.AllocationAttributes

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_SECTION. Дополнительные сведения см. в разделе ZwCreateSection .

IOSpace

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE.

IOSpace.BaseAddress

Используется, только если типDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE. Указывает начальный физический адрес области пространства ввода-вывода. Это значение должно быть выровнено с кратным PAGE_SIZE.

hPhysicalMemoryObject

При успешном вызове DXGKCB_CREATEPHYSICALMEMORYOBJECT это непрозрачный дескриптор обратно к объекту физической памяти, управляемому Dxgkrnl. Объект физической памяти можно предоставить другим документируемым функциям управления памятью для сопоставления виртуального адреса для доступа к ЦП. Этот дескриптор можно закрыть, вызвав DXGKCB_DESTROYPHYSICALMEMORYOBJECT.

hAdapterMemoryObject

При успешном вызове DXGKCB_CREATEPHYSICALMEMORYOBJECT это непрозрачный дескриптор обратно к объекту памяти адаптера, управляемого Dxgkrnl. Объект памяти адаптера можно предоставить другим документируемым функциям управления памятью, чтобы создать ADL для доступа к GPU. Если hAdapter имеет значение NULL, это значение будет иметь значение NULL и драйвер должен вызвать DXGKCB_OPENPHYSICALMEMORYOBJECT для создания этого дескриптора. Этот дескриптор можно закрыть путем вызова DXGKCB_CLOSEPHYSICALMEMORYOBJECT или предоставить DXGKCB_DESTROYPHYSICALMEMORYOBJECT (но не оба).

Комментарии

Поле hAdapter является необязательным при создании объекта физической памяти, но этот объект должен быть открыт для адаптера при вызове DXGKCB_OPENPHYSICALMEMORYOBJECT , прежде чем можно будет создать ADL. Это связано с тем, что ADL представляет логическую память, а каждый логический адаптер имеет уникальный домен. Не имеет значения, для какого физического адаптера создается память. Он будет открыт логическим адаптером, к которому принадлежит физический адаптер, и будет сопоставлен со всеми связанными физическими адаптерами.

Дополнительные сведения см. в статье Переназначение DMA IOMMU .

Требования

Требование Значение
Минимальная версия сервера 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