estructura DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT (d3dkmddi.h)

La estructura DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT contiene la información utilizada por la función de devolución de llamada DXGKCB_CREATEPHYSICALMEMORYOBJECT para crear memoria física.

Sintaxis

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;

Miembros

hAdapter

Adaptador para el que se asociará esta memoria física. Este parámetro es opcional y puede ser NULL. Si es NULL, el controlador debe llamar a DXGKCB_OPENPHYSICALMEMORYOBJECT antes de crear una lista de descriptores de direcciones (ADL). Vea Comentarios para obtener más información.

Size

Tamaño, en bytes, de la memoria física que se solicita. Si Type es DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, Size hace referencia al tamaño de la región de espacio de E/S proporcionada por el controlador.

Context

Un fragmento de tamaño de puntero de los datos de contexto que Dxgkrnl almacenará junto con el objeto de memoria física con fines de depuración. Dxgkrnl nunca usa ni desreferencia directamente este valor de ninguna manera. Este puede ser cualquier valor que elija el controlador, como la dirección de memoria de un objeto propiedad del controlador que posee este objeto de memoria física.

Type

Valor de DXGK_PHYSICAL_MEMORY_TYPE que especifica el tipo de memoria física que se va a crear. Si Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION, los atributos de asignación del objeto de sección siempre se SEC_COMMIT (sección asignada por PF) y el tipo de caché lo determina CacheType.

CacheType

Tipo de caché de las páginas. Si Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION, CacheType debe almacenarse en caché o combinarse con escritura.

Mdl

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_MDL.

Mdl.LowAddress

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obtener más información.

Mdl.HighAddress

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obtener más información.

Mdl.SkipBytes

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obtener más información.

Mdl.Flags

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_MDL. Consulte MmAllocatePagesForMdlEx para obtener más información.

ContiguousMemory

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY.

ContiguousMemory.LowestAcceptableAddress

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obtener más información.

ContiguousMemory.HighestAcceptableAddress

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obtener más información.

ContiguousMemory.BoundaryAddressMultiple

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Consulte MmAllocateContiguousMemorySpecifyCache para obtener más información.

Section

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION.

Section.DesiredAccess

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obtener más información.

Section.ObjectAttributes

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obtener más información.

Section.PageProtection

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Este valor debe ser uno de los siguientes valores: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE o PAGE_WRITECOPY. No especifique atributos de caché (por ejemplo, SEC_WRITECOMBINED) en este campo. Los atributos asignados del objeto de sección siempre se SEC_COMMIT (sección asignada por PF) y el tipo de caché lo determina CacheType. Consulte ZwCreateSection para obtener más información.

Section.AllocationAttributes

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Consulte ZwCreateSection para obtener más información.

IOSpace

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE.

IOSpace.BaseAddress

Se usa solo cuando Type es DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE. Especifica la dirección física inicial de la región del espacio de E/S. Este valor debe alinearse con un múltiplo de PAGE_SIZE.

hPhysicalMemoryObject

En una llamada correcta a DXGKCB_CREATEPHYSICALMEMORYOBJECT, se trata de un identificador opaco de vuelta a un objeto de memoria física administrado por Dxgkrnl. El objeto de memoria física se puede proporcionar a otras funciones de administración de memoria documentadas para asignar una dirección virtual para el acceso a la CPU. Este identificador se puede cerrar llamando a DXGKCB_DESTROYPHYSICALMEMORYOBJECT.

hAdapterMemoryObject

En una llamada correcta a DXGKCB_CREATEPHYSICALMEMORYOBJECT, se trata de un identificador opaco de vuelta a un objeto de memoria del adaptador administrado por Dxgkrnl. El objeto de memoria del adaptador se puede proporcionar a otras funciones de administración de memoria documentadas para generar un ADL para el acceso a GPU. Si hAdapter es NULL, este valor será NULL y el controlador debe llamar a DXGKCB_OPENPHYSICALMEMORYOBJECT para crear este identificador. Este identificador se puede cerrar llamando a DXGKCB_CLOSEPHYSICALMEMORYOBJECT o se puede proporcionar a DXGKCB_DESTROYPHYSICALMEMORYOBJECT (pero no a ambos).

Comentarios

El campo hAdapter es opcional al crear un objeto de memoria física, pero ese objeto debe abrirse en un adaptador de una llamada a DXGKCB_OPENPHYSICALMEMORYOBJECT antes de que se pueda crear un ADL. Esto se debe a que un ADL representa la memoria lógica y cada adaptador lógico tiene un dominio único. No importa en qué adaptador físico se crea la memoria. Se abrirá mediante el adaptador lógico al que pertenece el adaptador físico y se asignará a todos los adaptadores físicos vinculados.

Consulte la reasignación de DMA de IOMMU para obtener más información.

Requisitos

Requisito Value
Servidor mínimo compatible Windows Server 2022 (WDDM 2.9)
Encabezado d3dkmddi.h

Consulte también

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection