DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 구조체(d3dkmddi.h)
DXGKARGCB_CREATE_PHYSICAL_MEMORY_OBJECT 구조에는 DXGKCB_CREATEPHYSICALMEMORYOBJECT 콜백 함수가 실제 메모리를 만드는 데 사용하는 정보가 포함됩니다.
통사론
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;
회원
hAdapter
이 실제 메모리를 연결할 어댑터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. NULL인 경우 드라이버는 ADL(주소 설명자 목록)을 만들기 전에 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출해야 합니다. 자세한 내용은 비고를 참조하세요.
Size
요청되는 실제 메모리의 크기(바이트)입니다. 형식DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE경우 크기 드라이버에서 제공하는 IO 공간 영역의 크기를 나타냅니다.
Context
디버깅을 위해 Dxgkrnl 실제 메모리 개체와 함께 저장되는 컨텍스트 데이터의 포인터 크기 조각입니다. 이 값은 어떤 방식으로든 Dxgkrnl 직접 사용되거나 역참조되지 않습니다. 이 값은 이 실제 메모리 개체를 소유하는 드라이버 소유 개체의 메모리 주소와 같이 드라이버에서 선택한 값일 수 있습니다.
Type
만들 실제 메모리의 형식을 지정하는 DXGK_PHYSICAL_MEMORY_TYPE 값입니다. TypeDXGK_PHYSICAL_MEMORY_TYPE_SECTION경우 섹션 개체의 할당 특성은 항상 SEC_COMMIT(PF 매핑된 섹션)이며 캐시 형식은 CacheType의해 결정됩니다.
CacheType
페이지의 캐시 형식입니다. 형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우 CacheType 캐시되거나 쓰기 결합되어야 합니다.
Mdl
형식DXGK_PHYSICAL_MEMORY_TYPE_MDL경우에만 사용됩니다.
Mdl.LowAddress
형식DXGK_PHYSICAL_MEMORY_TYPE_MDL경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 참조하세요.
Mdl.HighAddress
형식DXGK_PHYSICAL_MEMORY_TYPE_MDL경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 참조하세요.
Mdl.SkipBytes
형식DXGK_PHYSICAL_MEMORY_TYPE_MDL경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 참조하세요.
Mdl.Flags
형식DXGK_PHYSICAL_MEMORY_TYPE_MDL경우에만 사용됩니다. 자세한 내용은 MmAllocatePagesForMdlEx 참조하세요.
ContiguousMemory
형식DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY경우에만 사용됩니다.
ContiguousMemory.LowestAcceptableAddress
형식DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 참조하세요.
ContiguousMemory.HighestAcceptableAddress
형식DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 참조하세요.
ContiguousMemory.BoundaryAddressMultiple
형식DXGK_PHYSICAL_MEMORY_TYPE_CONTIGUOUS_MEMORY경우에만 사용됩니다. 자세한 내용은 MmAllocateContiguousMemorySpecifyCache 참조하세요.
Section
형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우에만 사용됩니다.
Section.DesiredAccess
형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 참조하세요.
Section.ObjectAttributes
형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 참조하세요.
Section.PageProtection
형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우에만 사용됩니다. 이 값은 PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE 또는 PAGE_WRITECOPY 값 중 하나여야 합니다. 이 필드에 캐시 특성(예: SEC_WRITECOMBINED)을 지정하지 마세요. 섹션 개체의 할당된 특성은 항상 SEC_COMMIT(PF 매핑된 섹션)이며 캐시 형식은 CacheType의해 결정됩니다. 자세한 내용은 ZwCreateSection 참조하세요.
Section.AllocationAttributes
형식DXGK_PHYSICAL_MEMORY_TYPE_SECTION경우에만 사용됩니다. 자세한 내용은 ZwCreateSection 참조하세요.
IOSpace
형식DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE경우에만 사용됩니다.
IOSpace.BaseAddress
형식DXGK_PHYSICAL_MEMORY_TYPE_IO_SPACE경우에만 사용됩니다. IO 공간 영역의 시작 실제 주소를 지정합니다. 이 값은 PAGE_SIZE 배수에 맞춰야 합니다.
hPhysicalMemoryObject
DXGKCB_CREATEPHYSICALMEMORYOBJECT호출에 성공하면 Dxgkrnl관리되는 실제 메모리 개체에 대한 불투명 핸들입니다. 물리적 메모리 개체를 다른 문서화된 메모리 관리 함수에 제공하여 CPU 액세스를 위한 가상 주소를 매핑할 수 있습니다. 이 핸들은 DXGKCB_DESTROYPHYSICALMEMORYOBJECT호출하여 닫을 수 있습니다.
hAdapterMemoryObject
DXGKCB_CREATEPHYSICALMEMORYOBJECT호출에 성공하면 Dxgkrnl관리형 어댑터 메모리 개체에 대한 불투명 핸들입니다. 어댑터 메모리 개체를 다른 문서화된 메모리 관리 함수에 제공하여 GPU 액세스를 위한 ADL을 생성할 수 있습니다. hAdapter NULL이면 이 값은 NULL이 되고 드라이버는 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출하여 이 핸들을 만들어야 합니다. 이 핸들은 DXGKCB_CLOSEPHYSICALMEMORYOBJECT호출하여 닫을 수 있거나 DXGKCB_DESTROYPHYSICALMEMORYOBJECT(둘 다 아님)에 제공될 수 있습니다.
발언
실제 메모리 개체를 만들 때는 hAdapter 필드가 선택 사항이지만 ADL을만들려면 DXGKCB_OPENPHYSICALMEMORYOBJECT 호출에서 어댑터에 대해 해당 개체를 열어야 합니다. 이는 ADL이 논리 메모리를 나타내고 각 논리 어댑터에 고유한 도메인이 있기 때문입니다. 메모리가 생성되는 실제 어댑터는 중요하지 않습니다. 물리적 어댑터가 속한 논리 어댑터에 의해 열리고 연결된 모든 실제 어댑터에 매핑됩니다.
자세한 내용은 IOMMU DMA 다시 매핑 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 서버 | Windows Server 2022(WDDM 2.9) |
헤더 | d3dkmddi.h |
참고 항목
DXGKCB_CLOSEPHYSICALMEMORYOBJECT
DXGKCB_CREATEPHYSICALMEMORYOBJECT
DXGKCB_DESTROYPHYSICALMEMORYOBJECT
DXGKCB_OPENPHYSICALMEMORYOBJECT