Поделиться через


структура 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

Размер в байтах запрашиваемой физической памяти. Если типаDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, размер ссылается на размер области пространства ввода-вывода, предоставленной драйвером.

Context

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

Type

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

CacheType

Тип кэша страниц. Если типа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) в этом поле. Выделенные атрибуты объекта раздела всегда 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