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

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection