DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT structure (d3dkmddi.h)
La structure DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT contient les informations utilisées par la fonction de rappel DXGKCB_CREATEPHYSICALMEMORYOBJECT pour créer de la mémoire physique.
Syntaxe
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;
Membres
hAdapter
Adaptateur auquel cette mémoire physique sera associée. Ce paramètre est facultatif et peut être NULL. S’il a la valeur NULL, le pilote doit appeler DXGKCB_OPENPHYSICALMEMORYOBJECT avant de créer une liste de descripteurs d’adresses (ADL). Pour plus d'informations, consultez la section Notes.
Size
Taille, en octets, de la mémoire physique demandée. Si Type est DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, size fait référence à la taille de la région d’espace d’E/S fournie par le pilote.
Context
Élément de données de contexte de taille de pointeur que Dxgkrnl stocke avec l’objet mémoire physique à des fins de débogage. Cette valeur n’est jamais directement utilisée ou déréférencée par Dxgkrnl de quelque manière que ce soit. Il peut s’agir de n’importe quelle valeur du choix du pilote, telle que l’adresse mémoire d’un objet appartenant au pilote qui possède cet objet de mémoire physique.
Type
Valeur DXGK_PHYSICAL_MEMORY_TYPE qui spécifie le type de mémoire physique à créer. Si Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION, les attributs d’allocation de l’objet section sont toujours SEC_COMMIT (section mappée pf) et le type de cache est déterminé par CacheType.
CacheType
Type de cache des pages. Si Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION, CacheType doit être mis en cache ou combiné en écriture.
Mdl
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_MDL.
Mdl.LowAddress
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_MDL. Pour plus d’informations, consultez MmAllocatePagesForMdlEx .
Mdl.HighAddress
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_MDL. Pour plus d’informations, consultez MmAllocatePagesForMdlEx .
Mdl.SkipBytes
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_MDL. Pour plus d’informations, consultez MmAllocatePagesForMdlEx .
Mdl.Flags
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_MDL. Pour plus d’informations, consultez MmAllocatePagesForMdlEx .
ContiguousMemory
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY.
ContiguousMemory.LowestAcceptableAddress
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Pour plus d’informations, consultez MmAllocateContiguousMemorySpecifyCache .
ContiguousMemory.HighestAcceptableAddress
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Pour plus d’informations, consultez MmAllocateContiguousMemorySpecifyCache .
ContiguousMemory.BoundaryAddressMultiple
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY. Pour plus d’informations, consultez MmAllocateContiguousMemorySpecifyCache .
Section
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION.
Section.DesiredAccess
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Pour plus d’informations, consultez ZwCreateSection .
Section.ObjectAttributes
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Pour plus d’informations, consultez ZwCreateSection .
Section.PageProtection
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Cette valeur doit être l’une des valeurs suivantes : PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE ou PAGE_WRITECOPY. Ne spécifiez pas d’attributs de cache (par exemple, SEC_WRITECOMBINED) dans ce champ. Les attributs alloués de l’objet section sont toujours SEC_COMMIT (section pf mappée), et le type de cache est déterminé par CacheType. Pour plus d’informations, consultez ZwCreateSection .
Section.AllocationAttributes
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_SECTION. Pour plus d’informations, consultez ZwCreateSection .
IOSpace
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE.
IOSpace.BaseAddress
Utilisé uniquement lorsque Type est DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE. Spécifie l’adresse physique de départ de la région d’espace d’E/S. Cette valeur doit être alignée sur un multiple de PAGE_SIZE.
hPhysicalMemoryObject
Lors d’un appel réussi à DXGKCB_CREATEPHYSICALMEMORYOBJECT, il s’agit d’un handle opaque vers un objet de mémoire physique géré par Dxgkrnl. L’objet mémoire physique peut être fourni à d’autres fonctions de gestion de la mémoire documentées pour mapper une adresse virtuelle pour l’accès au processeur. Ce handle peut être fermé en appelant DXGKCB_DESTROYPHYSICALMEMORYOBJECT.
hAdapterMemoryObject
Lors d’un appel réussi à DXGKCB_CREATEPHYSICALMEMORYOBJECT, il s’agit d’un handle opaque vers un objet mémoire d’adaptateur géré par Dxgkrnl. L’objet de mémoire de l’adaptateur peut être fourni à d’autres fonctions de gestion de la mémoire documentées pour générer un ADL pour l’accès GPU. Si hAdapter a la valeur NULL, cette valeur est NULL et le pilote doit appeler DXGKCB_OPENPHYSICALMEMORYOBJECT pour créer ce handle. Ce handle peut être fermé en appelant DXGKCB_CLOSEPHYSICALMEMORYOBJECT, ou peut être fourni à DXGKCB_DESTROYPHYSICALMEMORYOBJECT (mais pas les deux).
Remarques
Le champ hAdapter est facultatif lors de la création d’un objet mémoire physique, mais cet objet doit être ouvert sur un adaptateur dans un appel à DXGKCB_OPENPHYSICALMEMORYOBJECT avant de pouvoir créer un ADL. Cela est dû au fait qu’un ADL représente la mémoire logique et que chaque adaptateur logique a un domaine unique. Peu importe l’adaptateur physique sur lequel la mémoire est créée. Il sera ouvert par l’adaptateur logique auquel appartient l’adaptateur physique et sera mappé à tous les adaptateurs physiques liés.
Pour plus d’informations , consultez Remapping IOMMU DMA .
Configuration requise
Condition requise | Valeur |
---|---|
Serveur minimal pris en charge | Windows Server 2022 (WDDM 2.9) |
En-tête | d3dkmddi.h |
Voir aussi
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT