estrutura DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT (d3dkmddi.h)
A estrutura DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT contém as informações usadas pela função de retorno de chamada DXGKCB_CREATEPHYSICALMEMORYOBJECT para criar memória física.
Sintaxe
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;
Membros
hAdapter
O adaptador para o qual essa memória física será associada. Esse parâmetro é opcional e pode ser NULL. Se for NULL, o driver deverá chamar DXGKCB_OPENPHYSICALMEMORYOBJECT antes de criar uma ADL (lista de descritores de endereço). Confira Comentários para obter mais informações.
Size
O tamanho, em bytes, da memória física que está sendo solicitada. Se Type for DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, Size se referirá ao tamanho da região de espaço de E/S fornecida pelo driver.
Context
Uma parte do tamanho do ponteiro dos dados de contexto que dxgkrnl armazenará junto com o objeto de memória física para fins de depuração. Esse valor nunca é usado ou desreferenciado diretamente por Dxgkrnl de forma alguma. Isso pode ser qualquer valor da escolha do driver, como o endereço de memória para um objeto de propriedade do driver que possui esse objeto de memória física.
Type
Um valor DXGK_PHYSICAL_MEMORY_TYPE que especifica o tipo de memória física a ser criada. Se Type for DXGK_PHYSICAL_MEMORY_TYPE_SECTION, os atributos de alocação do objeto de seção sempre serão SEC_COMMIT (seção mapeada pelo PF) e o tipo de cache será determinado por CacheType.
CacheType
O tipo de cache das páginas. Se Type for DXGK_PHYSICAL_MEMORY_TYPE_SECTION, CacheType deverá ser armazenado em cache ou combinado por gravação.
Mdl
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_MDL.
Mdl.LowAddress
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obter detalhes.
Mdl.HighAddress
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obter detalhes.
Mdl.SkipBytes
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obter detalhes.
Mdl.Flags
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obter detalhes.
ContiguousMemory
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY.
ContiguousMemory.LowestAcceptableAddress
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obter detalhes.
ContiguousMemory.HighestAcceptableAddress
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obter detalhes.
ContiguousMemory.BoundaryAddressMultiple
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obter detalhes.
Section
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_SECTION.
Section.DesiredAccess
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obter detalhes.
Section.ObjectAttributes
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obter detalhes.
Section.PageProtection
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Esse valor deve ser um dos seguintes valores: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE ou PAGE_WRITECOPY. Não especifique atributos de cache (por exemplo, SEC_WRITECOMBINED) neste campo. Os atributos alocados do objeto de seção são sempre SEC_COMMIT (seção mapeada pelo PF) e o tipo de cache é determinado por CacheType. Consulte ZwCreateSection para obter detalhes.
Section.AllocationAttributes
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obter detalhes.
IOSpace
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE.
IOSpace.BaseAddress
Usado somente quando Type é DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE. Especifica o endereço físico inicial da região de espaço de E/S. Esse valor deve ser alinhado a um múltiplo de PAGE_SIZE.
hPhysicalMemoryObject
Em uma chamada bem-sucedida para DXGKCB_CREATEPHYSICALMEMORYOBJECT, esse é um identificador opaco de volta para um objeto de memória física gerenciado por Dxgkrnl. O objeto de memória física pode ser fornecido a outras funções de gerenciamento de memória documentadas para mapear um endereço virtual para acesso à CPU. Esse identificador pode ser fechado chamando DXGKCB_DESTROYPHYSICALMEMORYOBJECT.
hAdapterMemoryObject
Em uma chamada bem-sucedida para DXGKCB_CREATEPHYSICALMEMORYOBJECT, esse é um identificador opaco de volta para um objeto de memória do adaptador gerenciado por Dxgkrnl. O objeto de memória do adaptador pode ser fornecido a outras funções de gerenciamento de memória documentadas para gerar um ADL para acesso à GPU. Se hAdapter for NULL, esse valor será NULL e o driver deverá chamar DXGKCB_OPENPHYSICALMEMORYOBJECT para criar esse identificador. Esse identificador pode ser fechado chamando DXGKCB_CLOSEPHYSICALMEMORYOBJECT ou pode ser fornecido para DXGKCB_DESTROYPHYSICALMEMORYOBJECT (mas não ambos).
Comentários
O campo hAdapter é opcional ao criar um objeto de memória física, mas esse objeto deve ser aberto em um adaptador em uma chamada para DXGKCB_OPENPHYSICALMEMORYOBJECT antes que um ADL possa ser criado. Isso ocorre porque um ADL representa memória lógica e cada adaptador lógico tem um domínio exclusivo. Não importa em qual adaptador físico a memória é criada. Ele será aberto pelo adaptador lógico ao qual o adaptador físico pertence e será mapeado para todos os adaptadores físicos vinculados.
Confira Remapeamento de DMA IOMMU para obter mais informações.
Requisitos
Requisito | Valor |
---|---|
Servidor mínimo com suporte | Windows Server 2022 (WDDM 2.9) |
Cabeçalho | d3dkmddi.h |
Confira também
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT