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
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT