structure DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT (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 pour lequel cette mémoire physique sera associée. Ce paramètre est facultatif et peut être NULL. S’il s’agit de NULL, le pilote doit appeler DXGKCB_OPENPHYSICALMEMORYOBJECT avant de créer une liste de descripteurs d’adresse (ADL). Pour plus d’informations, consultez les remarques.
Size
Taille, en octets, de la mémoire physique demandée. Si type est DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE, taille fait référence à la taille de la région d’espace d’E/S fournie par le pilote.
Context
Un élément de contexte de taille pointeur qui Dxgkrnl stockera en même temps que l’objet mémoire physique à des fins de débogage. Cette valeur n’est jamais directement utilisée ou déréféré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 à un objet appartenant au pilote propriétaire de cet objet 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 de 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 de section sont toujours SEC_COMMIT (section mappée pf), 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 à un objet de mémoire physique managéeDxgkrnl. L’objet mémoire physique peut être fourni à d’autres fonctions de gestion de 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 de mémoire de l’adaptateur managé Dxgkrnl. L’objet mémoire de l’adaptateur peut être fourni à d’autres fonctions de gestion de 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 qu’un ADL puisse être créé. Cela est dû au fait qu’un ADL représente la mémoire logique et que chaque adaptateur logique a un domaine unique. Il n’importe pas 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 de remapping IOMMU DMA.
Exigences
Exigence | Valeur |
---|---|
serveur minimum pris en charge | Windows Server 2022 (WDDM 2.9) |
d’en-tête | d3dkmddi.h |
Voir aussi
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT