Freigeben über


DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT Struktur (d3dkmddi.h)

Die DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT Struktur enthält die Informationen, die von der DXGKCB_CREATEPHYSICALMEMORYOBJECT Rückruffunktion zum Erstellen des physischen Arbeitsspeichers verwendet werden.

Syntax

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;

Angehörige

hAdapter

Der Adapter, für den dieser physische Speicher zugeordnet wird. Dieser Parameter ist optional und kann NULL sein. Wenn er NULL ist, muss der Treiber DXGKCB_OPENPHYSICALMEMORYOBJECT aufrufen, bevor eine Adressdeskriptorliste (ADL) erstellt wird. Weitere Informationen finden Sie in den Hinweisen.

Size

Die Größe des angeforderten physischen Arbeitsspeichers in Bytes. Wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEist, bezieht sich Größe auf die Größe des E/A-Raumbereichs, der vom Treiber bereitgestellt wird.

Context

Eine Zeigergröße von Kontextdaten, die Dxgkrnl- zusammen mit dem physischen Speicherobjekt für Debuggingzwecke speichern. Dieser Wert wird niemals direkt verwendet oder von Dxgkrnl auf irgendeine Weise abgeleitet. Dies kann ein beliebiger Wert der Auswahl des Treibers sein, z. B. die Speicheradresse eines treibereigenen Objekts, das dieses physische Speicherobjekt besitzt.

Type

Ein DXGK_PHYSICAL_MEMORY_TYPE Wert, der den Typ des zu erstellenden physischen Speichers angibt. Wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTIONist, werden die Zuordnungsattribute des Abschnittsobjekts immer SEC_COMMIT (PF-zugeordneter Abschnitt) und der Cachetyp wird durch CacheType-bestimmt.

CacheType

Der Cachetyp der Seiten. Wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist, muss CacheType- entweder zwischengespeichert oder mit Schreibzugriff kombiniert werden.

Mdl

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_MDList.

Mdl.LowAddress

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_MDList. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx.

Mdl.HighAddress

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_MDList. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx.

Mdl.SkipBytes

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_MDList. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx.

Mdl.Flags

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_MDList. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx.

ContiguousMemory

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYist.

ContiguousMemory.LowestAcceptableAddress

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache.

ContiguousMemory.HighestAcceptableAddress

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache.

ContiguousMemory.BoundaryAddressMultiple

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORYist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache.

Section

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist.

Section.DesiredAccess

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist. Einzelheiten finden Sie unter ZwCreateSection.

Section.ObjectAttributes

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist. Einzelheiten finden Sie unter ZwCreateSection.

Section.PageProtection

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist. Dieser Wert sollte einer der folgenden Werte sein: PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE oder PAGE_WRITECOPY. Geben Sie in diesem Feld keine Cacheattribute (z. B. SEC_WRITECOMBINED) an. Die zugeordneten Attribute des Abschnittsobjekts werden immer SEC_COMMIT (PF-zugeordneter Abschnitt) und der Cachetyp wird durch CacheType-bestimmt. Einzelheiten finden Sie unter ZwCreateSection.

Section.AllocationAttributes

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_SECTIONist. Einzelheiten finden Sie unter ZwCreateSection.

IOSpace

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEist.

IOSpace.BaseAddress

Wird nur verwendet, wenn Typ-DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACEist. Gibt die start physische Adresse des E/A-Raumbereichs an. Dieser Wert muss an einem Vielfachen von PAGE_SIZE ausgerichtet werden.

hPhysicalMemoryObject

Bei einem erfolgreichen Aufruf von DXGKCB_CREATEPHYSICALMEMORYOBJECTist dies ein undurchsichtiges Handle zurück zu einem Dxgkrnl-verwalteten physischen Speicherobjekts. Das physische Speicherobjekt kann anderen dokumentierten Speicherverwaltungsfunktionen bereitgestellt werden, um eine virtuelle Adresse für den CPU-Zugriff zuzuordnen. Dieses Handle kann durch Aufrufen von DXGKCB_DESTROYPHYSICALMEMORYOBJECTgeschlossen werden.

hAdapterMemoryObject

Bei einem erfolgreichen Aufruf von DXGKCB_CREATEPHYSICALMEMORYOBJECTist dies ein undurchsichtiges Handle zurück zu einem Dxgkrnl-managed adapter memory object. Das Adapterspeicherobjekt kann anderen dokumentierten Speicherverwaltungsfunktionen bereitgestellt werden, um eine ADL für den GPU-Zugriff zu generieren. Wenn hAdapter- NULL ist, ist dieser Wert NULL, und der Treiber muss DXGKCB_OPENPHYSICALMEMORYOBJECT aufrufen, um dieses Handle zu erstellen. Dieses Handle kann durch Aufrufen von DXGKCB_CLOSEPHYSICALMEMORYOBJECTgeschlossen werden oder kann für DXGKCB_DESTROYPHYSICALMEMORYOBJECT (aber nicht für beide) bereitgestellt werden.

Bemerkungen

Das hAdapter--Feld ist optional, wenn ein physisches Speicherobjekt erstellt wird. Dieses Objekt muss jedoch für einen Adapter in einem Aufruf von DXGKCB_OPENPHYSICALMEMORYOBJECT geöffnet werden, bevor eine ADLerstellt werden kann. Dies liegt daran, dass eine ADL den logischen Speicher darstellt und jeder logische Adapter über eine eindeutige Domäne verfügt. Es spielt keine Rolle, für welchen physischen Adapter der Speicher erstellt wird. Es wird vom logischen Adapter geöffnet, zu dem der physische Adapter gehört, und wird allen verknüpften physischen Adaptern zugeordnet.

Weitere Informationen finden Sie unter IOMMU DMA-Neumapping.

Anforderungen

Anforderung Wert
mindestens unterstützte Server- Windows Server 2022 (WDDM 2.9)
Header- d3dkmddi.h

Siehe auch

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection