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