Compartilhar via


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

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection