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
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT