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 von physischem Arbeitsspeicher 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;

Member

hAdapter

Der Adapter, dem dieser physische Arbeitsspeicher zugeordnet wird. Dieser Parameter ist optional und kann NULL sein. Wenn es NULL ist, muss der Treiber DXGKCB_OPENPHYSICALMEMORYOBJECT aufrufen, bevor er eine Adressbeschreibungsliste (Address Descriptor List, ADL) erstellt. Weitere Informationen finden Sie unter Hinweise.

Size

Die Größe des angeforderten physischen Arbeitsspeichers in Bytes. Wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE ist, bezieht sich Size auf die Größe des vom Treiber bereitgestellten E/A-Raumbereichs.

Context

Ein Kontextdatenteil in Zeigergröße, den Dxgkrnl zu Debugzwecken neben dem physischen Speicherobjekt speichert. Dieser Wert wird nie direkt von Dxgkrnl verwendet oder in keiner Weise abgeleitet. Dies kann ein beliebiger Wert des Treibers sein, z. B. die Speicheradresse für ein treibereigenes Objekt, das dieses physische Speicherobjekt besitzt.

Type

Ein DXGK_PHYSICAL_MEMORY_TYPE Wert, der den Typ des zu erstellenden physischen Arbeitsspeichers angibt. Wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist, werden die Zuordnungsattribute des Abschnittsobjekts immer SEC_COMMIT (Abschnitt mit PF-Zuordnung), und der Cachetyp wird durch CacheType bestimmt.

CacheType

Der Cachetyp der Seiten. Wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist, muss CacheType entweder zwischengespeichert oder mit Schreibvorgängen kombiniert werden.

Mdl

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL ist.

Mdl.LowAddress

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL ist. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx .

Mdl.HighAddress

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL ist. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx .

Mdl.SkipBytes

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL ist. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx .

Mdl.Flags

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_MDL ist. Weitere Informationen finden Sie unter MmAllocatePagesForMdlEx .

ContiguousMemory

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY ist.

ContiguousMemory.LowestAcceptableAddress

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY ist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache .

ContiguousMemory.HighestAcceptableAddress

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY ist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache .

ContiguousMemory.BoundaryAddressMultiple

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY ist. Weitere Informationen finden Sie unter MmAllocateContiguousMemorySpecifyCache .

Section

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist.

Section.DesiredAccess

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist. Weitere Informationen finden Sie unter ZwCreateSection .

Section.ObjectAttributes

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist. Weitere Informationen finden Sie unter ZwCreateSection .

Section.PageProtection

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist. 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 von CacheType bestimmt. Weitere Informationen finden Sie unter ZwCreateSection .

Section.AllocationAttributes

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION ist. Weitere Informationen finden Sie unter ZwCreateSection .

IOSpace

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE ist.

IOSpace.BaseAddress

Wird nur verwendet, wenn TypeDXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE ist. Gibt die physische Startadresse der E/A-Raumregion an. Dieser Wert muss auf ein Vielfaches von PAGE_SIZE ausgerichtet werden.

hPhysicalMemoryObject

Bei einem erfolgreichen Aufruf von DXGKCB_CREATEPHYSICALMEMORYOBJECT ist dies ein undurchsichtiges Handle zurück an ein von Dxgkrnl verwaltetes physisches Speicherobjekt. Das Objekt des physischen Arbeitsspeichers kann anderen dokumentierten Speicherverwaltungsfunktionen zur Verfügung gestellt werden, um eine virtuelle Adresse für den CPU-Zugriff zuzuordnen. Dieses Handle kann durch Aufrufen DXGKCB_DESTROYPHYSICALMEMORYOBJECT geschlossen werden.

hAdapterMemoryObject

Bei einem erfolgreichen Aufruf von DXGKCB_CREATEPHYSICALMEMORYOBJECT ist dies ein undurchsichtiges Handle zurück an ein Speicherobjekt des verwalteten Dxgkrnl-Adapters. Das Adapterspeicherobjekt kann für andere dokumentierte 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_CLOSEPHYSICALMEMORYOBJECT geschlossen oder für DXGKCB_DESTROYPHYSICALMEMORYOBJECT bereitgestellt werden (aber nicht beides).

Hinweise

Das Feld hAdapter ist beim Erstellen eines physischen Speicherobjekts optional. Dieses Objekt muss jedoch für einen Adapter in einem Aufruf von DXGKCB_OPENPHYSICALMEMORYOBJECT geöffnet werden, bevor eine ADL erstellt werden kann. Dies liegt daran, dass eine ADL den logischen Arbeitsspeicher darstellt und jeder logische Adapter über eine eindeutige Domäne verfügt. Es spielt keine Rolle, für welchen physischen Adapter der Arbeitsspeicher erstellt wird. Er wird durch den logischen Adapter geöffnet, dem der physische Adapter angehört, und allen verknüpften physischen Adaptern zugeordnet.

Weitere Informationen finden Sie unter IOMMU DMA Remapping .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Server) Windows Server 2022 (WDDM 2.9)
Kopfzeile d3dkmddi.h

Weitere Informationen

DXGK_PHYSICAL_MEMORY_TYPE

DXGKCB_ALLOCATEADL

DXGKCB_CLOSEPHYSICALMEMORYOBJECT

DXGKCB_CREATEPHYSICALMEMORYOBJECT

DXGKCB_DESTROYPHYSICALMEMORYOBJECT

DXGKCB_OPENPHYSICALMEMORYOBJECT

MmAllocateContiguousMemorySpecifyCache

MmAllocatePagesForMdlEx

ZwCreateSection